2017-02-11 17 views
0

我是新來的MongoDB和貓鼬。帶有ObjectId數組的文檔 - 推送值(如果存在),刪除否則刪除

所以我的模型擁有許多領域,在他們之中是的ObjectID

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

我想要實現我的查詢是:

查找模型通過它的ID,

如果內部數組包含特定值,則將其從數組中移除。

如果該值是不是inner_array內,將其推

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

我相信這可以在一個單一的findOneAndUpdate寫,但我不能找出語法..

非常感謝!

回答

1

我相信你可以做到這一點使用MongooseArray.pullMongooseArray.addToSet

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

有與做這種方式,在回調函數一個問題 - 「inner_object_id」變量是不確定的。它被定義之前 – Moka

+0

好吧,我似乎已經通過使用.bind() – Moka

+0

變量很高興我可以幫助。 –