使用$ unset / $ pull的Mongodb update()不做$ pull

时间:2013-03-21 08:54:21

标签: node.js mongodb mongoose

我正在尝试从MongoDB文档中的数组中删除一些项目:

doc1
  items
    item
       id=1
    item
       id=2
    item
       id=3
doc2
  items
    item
      id=4
    item
      id=5
    item
      id=6

我用它来移除例如项目id = 5:

(...)
updateItems({'items.id': 5},    { $unset: { 'items.$': 1 }},    { $pull: {'items'    : null} });
(...)
function updateItems(objmatch, objunset, objpull){  
coremodels.getProfileTable(req).update(
    objmatch, 
    objunset,
    {multi: true}, function(err) {
        coremodels.getProfileTable(req).update(
                        objmatch, 
                        objpull,
                        {multi: true}, function(err) {
        console.log('COMPLETED');
});
(...)                       

$ unset工作正常,但$ pull似乎不起作用。此操作的最终结果是空(Null)项目5。

任何想法为什么$ pull不会删除空文档?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

你的updateArray函数有两个参数,但是你传递了三个参数。我认为你根本不会向驱动程序发送{ $pull: {'items' : null} }

<强>加了:

取消第5项后,您的匹配文档将不再匹配任何内容。第二次更新时,请尝试将objmatch替换为{ },这应该只删除任何空值。