【问题标题】:Pull object from an array with node-mongodb-native使用 node-mongodb-native 从数组中提取对象
【发布时间】:2012-11-01 00:25:18
【问题描述】:

我正在为 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) {}
);

但这似乎不起作用,我不明白为什么,知道吗?

【问题讨论】:

  • 我认为您需要使用:{$pull:{baz:{ removeIt }}},而不是 - 您尝试过吗?
  • 感谢您的评论,但这会引发错误,{$pull:{baz: removeIt }} 只是不做我的实现。

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


【解决方案1】:

我刚刚在 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}}

它应该可以工作。

【讨论】:

  • 是的,它也适用于我的 mongo shell,但不适用于 node-mongodb-native 驱动程序
猜你喜欢
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 2020-03-23
  • 2023-04-04
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多