我需要在数组(target
)中添加或删除ID,具体取决于它是否已存在。这就是我这样做的方式:
var isExisting = Articles.findOne({ _id }).target.indexOf(mID) > -1
if (isExisting === false) {
Articles.update(
{ _id },
{ $addToSet: { target: mID } }
)
} else if (isExisting === true) {
Articles.update(
{ _id },
{ $pull: { target: mID } }
)
}
是否有可能以更好的方式做到这一点 - 不用if / else和min。两个db操作?
答案 0 :(得分:0)
Mongoose操作是异步的,因此您需要等待其回调才能获取文档。
// find the article by its ID
Articles.findById(_id, function (err, article) {
// make appropriate change depending on whether mID exist in the article's target
if (article.target.indexOf(mID) > -1)
article.target.pull(mID)
else
article.target.push(mID)
// commit the change
article.save(function (err) {
});
})
虽然你正在做if / else,但你正在进行2次操作。
答案 1 :(得分:-1)
这是我的建议
let isExisting = Articles.findOne({ _id: _id, target : mID}) //mongo can search for mID in array of [mIDs]
let query = { _id : _id };
let update = isExisting ? { $pull: { target: mID } } : { $addToSet: { target: mID } };
Articles.update(query, update);
现在更好更清楚了吗?