2016-10-27 3 views
0

Ich habe eine Mongo-Sammlung die besteht aus einem Dokument und einem verschachtelten Objekt beschreibt, welche Sammlungen das Dokument ist und wann es hinzugefügt wurde. Ich möchte Schlüssel-Wert-Paare aus einem verschachtelten Objekt basierend auf einer Bedingung entfernen, z. ist der Wert (ein Datum) vor 1-1-2016.Mongo Entfernen von verschachtelten Objekt von Wert

Beispiel:

{ 
    "_id" : ObjectId("581214940911ad3de98002db"), 
    "collections" : { 
     "c01" : ISODate("2016-10-27T15:52:04.512Z"), 
     "c02" : ISODate("2015-11-21T16:06:06.546Z") 
    } 
} 

Bedürfnisse

{ 
    "_id" : ObjectId("581214940911ad3de98002db"), 
    "collections" : { 
     "c01" : ISODate("2016-10-27T15:52:04.512Z"), 
    } 
} 

Eine Alternative, das Schema zu so etwas wie dies wäre zu werden zu ändern:

{ 
    "_id" : ObjectId("581214940911ad3de98002db"), 
    "collections" : [ 
     { 
      "id": "c01", 
      "date": ISODate("2016-10-27T15:52:04.512Z") 
     }, 
     { 
      "id": "c02", 
      "date" : ISODate("2015-11-21T16:06:06.546Z") 
     } 
    ] 
} 

wobei in diesem Fall das Entfernen eines Dokuments aus a wäre einfach. Ich zögere das etwas, weil es einige der anderen Fragen, die ich gerne unterstützen würde, verkomplizieren würde. Vielen Dank!

+0

löschen Sie selbst einen großen Gefallen tun, wenn Sie das Schema ändern. – styvane

Antwort

0

Ich ziehe die zweite Struktur für Ihr Schema

{ 
    "_id" : ObjectId("581214940911ad3de98002db"), 
    "collections" : [ 
     { 
      "id": "c01", 
      "date": ISODate("2016-10-27T15:52:04.512Z") 
     }, 
     { 
      "id": "c02", 
      "date" : ISODate("2015-11-21T16:06:06.546Z") 
     } 
    ] 
} 

dann in der Lage von collections wie diese

db.collectionName.update(
    { },// if you want can add query for specific Id {"_id" : requestId}, 
    { $pull: { collections: { date: {$lt: yourDate} } } }, // if need can convert iso date string like: new Date(yourDate).toISOString() 
    { multi: true } 
) 
Verwandte Themen