我是MongoDB和mongoose的新手。
所以我的模型包含很多字段,其中有一个ObjectIDs数组
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中,但我无法弄清楚语法..
非常感谢!
答案 0 :(得分:1)
我相信您可以使用MongooseArray.pull和MongooseArray.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
}