mongoose如何查询多个文档,如果没有find,保存并返回ID?

我正在尝试创build一个查询以满足以下条件:

  1. 在集合中search具有指定名称的文档。
  2. 如果集合中不存在具有指定名称的文档,请创build新文档。
  3. 返回文件的.id文件,不pipe是新保存还是不保存。

如何在不使用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 } 

你应该使用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()将使用该名称创build新标签并将其返回,这样您可以拥有其_id。