我正在尝试创建一个查询来满足以下条件:
如何在不使用for循环的情况下实现此目的?
var tagArr = req.body.tags.join()
Tag.find({tagName: {$in: tagArr}}, function(err, docs){
// find the tag._ids by tagNames
// if tag not found, create a tag
// return old and new tag_ids with the tagNames
}
答案 0 :(得分:1)
您应findOneAndUpdate()使用upsert
选项设置为true
:
var tagArr = req.body.tags.join();
var idArr = [];
tagArr.forEach(function(tag){
Tag.findOneAndUpdate(
{tagName: tag},
{tagName: tag},
{upsert: true},
function(err, doc){
if(!err)
idArr.push(doc._id);
}
});
如果没有指定名称的标签,findOneAndUpdate()将创建具有该名称的新标签并将其返回,因此您可以拥有其_id。