2013-06-24 76 views
0

所以我有一個使用大量嵌入式文檔的應用程序,這很好。但是我注意到,當您在Mongo shell中使用show collections時,某些嵌入式文檔不會顯示。通過Mongo Shell刪除非收集嵌入式文檔

通常情況下這不是問題,但在設置嵌入式文檔時,我不小心添加了一個空條目到其中一個條目。我通常會做這樣的事情來刪除條目db.collection.remove({_id: ObjectId('<OBJECT_ID>')}),但由於其中一些不是實際的集合,我無法這樣做。

我也不確定如何在實際刪除文檔時成功拼接出來。我可以將它與條目拼接在一起,但是我有一種感覺,它會讓嵌入文檔在數據庫中的某處浮動。

任何想法如何做到這一點?

爲了給你一個想法是什麼我談論,入口的一個例子:

entry = { 
    _id: ObjectId('blah blah blah'), 
    name: { 
     first: 'example', 
     last: 'city' 
    }, 
    log : [ 
     { 
      _id: ObjectId('some id'), 
      action: 'whatever', 
      someField: 'etc.' 
     }, 
     { 
      _id: ObjectId('another id') 
     }, 
     { 
      _id: ObjectId('yet another id'), 
      action: 'who cares', 
      someField: 'data' 
     } 
    ] 
} 
+0

你想從本文件中刪除什麼? 「日誌」條目之一?爲什麼不使用db.collection.update({_ id:blah blah},{$ pull:{「log._id」:another_id}})? –

+0

我想刪除數組中的單個條目。看來美元拉是我一直在尋找的。如果您想以小解釋和文檔鏈接的形式添加此答案,我很樂意接受您的答案。 –

回答

1

如果你想刪除的日誌條目之一,那麼你想要的$pull operator

格式會是這樣的:

db.collection.update({_id:<id-of-document-to-update>}, 
        {$pull:{"log._id":<id-of-log-entry-to-remove>"}} 
) 

此說,找到文件具有一定_id和日誌數組中刪除某些sub_id的條目。