2016-10-27 142 views
0

我有一個Mongo集合,它由一個文檔和一個嵌套對象組成,它描述了文檔在什麼集合以及何時添加。我想根據條件從嵌套對象中刪除鍵值對,例如是1-1-2016之前的值(日期)。Mongo從嵌套對象中刪除值

實施例:

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

需要成爲

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

一個替代方案將是到模式改變到這樣的事情:

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

在這種情況下,除去從原稿一個會很容易。我有點不願意這樣做,因爲這會使我想支持的其他一些查詢複雜化。謝謝!

+0

如果更改架構你會做你自己一個大忙第二結構。 – styvane

回答

0

我希望爲自己的模式

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

然後能夠從collections刪除這樣

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 } 
)