34

私は次のマングーススキーマを持っています:

user = {
    "userId" : "myId",
    "connections":
    [{
        "dateConnectedUnix": 1334567891,
        "isActive": true
    }, {
        "dateConnectedUnix": 1334567893,
        "isActive": false
    }]
}

connections以下を取得するために、配列の 2 番目の項目を削除したいと思います。

user = {
    "userId" : "myId",
    "connections": 
    [{
        "dateConnectedUnix": 1334567893,
        "isActive": false
    }]
}

次のコードは、期待どおりに機能します。

userAccounts.update(
    { 'connections.isActive': false }, 
    { $pull: { 'connections.isActive':false }}, 
    function (err, val) {
        console.log(val)
    }
);

しかし、ObjectId に基づいて削除する必要があります。そして、以下はうまくいきません:

userAccounts.update(
    { 'connections._id': '1234-someId-6789' }, 
    { $pull: { 'connections._id': '1234-someId-6789' } },
    function (err, val) {
        console.log(val)
    }
);

助言がありますか?私は何時間も画面 (別名 Google、Stackoverflow など) に頭をぶつけていましたが、運がありませんでした。

4

7 に答える 7

10
user: {
 _id: ObjectId('5ccf3fa47a8f8b12b0dce204'),
 name: 'Test',
 posts: [
  ObjectId("5cd07ee05c08f51af8d23b64"),
  ObjectId("5cd07ee05c08f51af8d23c52")
 ]
}

投稿配列から単一の投稿を削除する

user.posts.pull("5cd07ee05c08f51af8d23b64"); user.save();

于 2019-05-06T20:16:49.677 に答える
8

ObjectId で update を使用するには、文字列表現の代わりに ObjectId オブジェクトを使用する必要があります。

var ObjectId = require('mongoose').Types.ObjectId;

userAccounts.update(
    { 'connections._id': new ObjectId('1234-someId-6789') }, 
    { $pull: { 'connections._id': new ObjectId('1234-someId-6789') } }, 
    function (err,val) {
        console.log(val)
    }
);
于 2013-11-05T10:13:56.890 に答える