0

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) {}
);

しかし、これはうまくいかないようで、理由がわかりません。

4

1 に答える 1

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}}

そしてそれはうまくいくはずです。

于 2012-11-12T15:10:43.017 に答える