2017-02-11 9 views
0

私はMongoDBとmongooseを初めて使っています。ObjectIdを持つDoc - 値があればそれを押して、そうでなければ削除します

だから私のモデルはそれらの中で、多くのフィールドを保持している私は、クエリを達成しようとしている何のObjectID

var modelSchema = new Schema({ 
    //... 
    inner_array: [Schema.Types.ObjectId], 
    //... 
}); 

の配列があるさ:

それは、ID、

だし、モデルを探します

内側の配列に特定の値が含まれている場合は、配列からそれを削除します。

値がinner_array内にない場合、私は、これは単一findOneAndUpdateに書き込むことができると信じて、私は、構文を理解することはできません

var target_id = // document id 
var inner_object_id = // value to push 

models.MyModel.findOne(
    {_id: target_id}, 
    function (err, model) { 
    // IN THIS SCOPE 'INNER_OBJECT_ID' IS UNDEFINED 

    // if model.inner_array contains 'inner_object_id', remove it 
    // otherwise, push 'inner_object_id' into model.inner_array 

    model.save(); 
    res.json(model); // return modified document to client 
    } 
); 

..

おかげでたくさんのことをプッシュ!

答えて

1

は、私はあなたが

var target_id = // document id 
var inner_object_id = // value to push 

models.MyModel.findOne({ 
    _id: target_id 
}, function (err, model) { 
    if (model.inner_array.indexOf(inner_object_id) !== -1) { 
    model.inner_array.pull(inner_object_id); 
    } else { 
    model.inner_array.addToSet(inner_object_id); 
    } 
    model.save(); 
    res.json(model); // return modified document to client 
} 
+0

MongooseArray.pullMongooseArray.addToSetを使用すると、コールバック関数では、このようにそれをやってに問題がありましたことを達成できると信じて - 「inner_object_id」変数が定義されていません。それは – Moka

+0

の前に定義されました。私は変数を.bind()を使って渡したようです。 – Moka

+0

うれしいです。 –

関連する問題