所以我有一个使用大量嵌入式文档的应用程序,这很好。但是我注意到,当您在Mongo shell中show collections
时,某些嵌入式文档不会显示。
通常情况下这不是问题,但在设置嵌入式文档时,我不小心在其中一个条目中添加了一个空条目。我通常会做这样的事情来删除条目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 :(得分:1)
如果要删除其中一个日志条目,则需要$pull operator。
格式如下:
db.collection.update({_id:<id-of-document-to-update>},
{$pull:{"log._id":<id-of-log-entry-to-remove>"}}
)
这就是说,查找包含某些_id
的文档,并从日志数组中删除包含某些sub_id
的条目。