使用node-mongodb-native从数组中拉取对象

时间:2012-11-12 15:05:00

标签: node.js mongodb node-mongodb-native

我正在努力使用nodejs的mongodb本机驱动程序进行简单的操作。 这是我的mongo文件:

{
    "_id" : 1,
    "foo" : "bar",
    "baz" : [
         {
            "a" : "b",
            "c" : 1
         },
         {
            "a" : "b",
            "c" : 2
         }
    ]
}

我有一个如下所示的变种:

var removeIt = {"a" : "b", "c" : 1};

因此,为了从baz数组中提取此对象,我尝试执行以下操作:

collection.update(
        {_id:1}, 
        {$pull:{baz:{a:removeIt.a, c:removeIt.c}}},
        {safe:true},
        function(err, result) {}
);

但这似乎不起作用,我不明白为什么,任何想法?

1 个答案:

答案 0 :(得分:3)

我刚刚在MongoShell上试过这个,以下内容对我有用:

> db.test.insert( {
    "_id" : 1,
    "foo" : "bar",
    "baz" : [
         {
            "a" : "b",
            "c" : 1
         },
         {
            "a" : "b",
            "c" : 2
         }
    ]
});

> db.test.findOne();
{ "_id" : 1, "baz" : [ { "a" : "b", "c": 1 }, { "a" : "b", "c" : 2 } ], "foo" : "bar" }

> removeIt = {"a" : "b", "c" : 1};
> db.test.update( { _id: 1 }, { $pull: { baz: removeIt } } );

> db.test.findOne();
{ "_id" : 1, "baz" : [ { "a" : "b", "c" : 2 } ], "foo" : "bar" }

所以修改你的:

{$pull:{baz:{a:removeIt.a, c:removeIt.c}}}

为:

{$pull:{baz: removeIt}}

它应该有用。