【问题标题】:Mongoose how do I query for multiple documents, save if not found, and return id?Mongoose如何查询多个文档,如果找不到则保存并返回ID?
【发布时间】:2015-10-13 16:56:31
【问题描述】:

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

  1. 在集合中搜索具有指定名称的文档。
  2. 如果集合中不存在指定名称的文档,则创建新文档。
  3. 返回文档的 ._id,不管它们是不是新保存的。

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2016-01-18
      • 2020-01-20
      • 1970-01-01
      • 2020-11-25
      • 2017-02-10
      • 2020-05-24
      • 1970-01-01
      • 2021-04-11
      • 2021-02-21
      相关资源
      最近更新 更多