javascript - 如何在 Mongoose 中创建/查找?

标签 javascript node.js mongodb mongoose

有时我需要一个文档存在于数据库中,我很乐意使用现有文档,或者在缺少文档时创建该文档,然后使用新文档。

这似乎是一个相当常见的用例,但我查看了 Mongoose docs我什么也找不到。

Mongoose Collection 方法,如 findOneAndUpdate()update()upsert: true 是关于修改文档 - 我不希望如果文档存在,则修改文档,只需获取对它的引用即可。

示例:(为@neillunn 添加)我想添加一个引用“名称”为“foo”的公司的用户。在此之前,我想用 {name: 'foo'} 查找一个公司,如果它不存在就创建它。

示例 2:(为@neillunn 添加)我现在用来处理示例场景的代码:

// Find or create an an instance and return a cb with a reference to it.
var findOrCreate = function(model, criteria, cb){
    model.update(criteria, criteria, {upsert: true}, function(err, numberAffected, raw){
        if ( ! raw.updatedExisting ) {
            console.log('Created instance')
        } else {
            console.log('Found existing instance')
        }           
        model.findOne(criteria, cb)
    })
}

注意:findOneAndUpdate() 不起作用,因为它会尝试修改现有文档,并获得“重复键错误索引”

最佳答案

正如评论中所述, Mongoose 有一个插件可以做到这一点: http://github.com/drudge/mongoose-findorcreate

This Thread还描述了一种无需插件即可实现此目的的方法。我只是不确定它是否适用于 Mongoose 。

关于javascript - 如何在 Mongoose 中创建/查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25117210/

相关文章:

javascript - 使用 javascript 将 data-parsley-error-message 属性添加到字段

javascript - $ (Node+Express+Pug+JQuery) 上未定义

javascript - Date epoch 是安全的唯一标识符吗?

java - Mongodb - 更新特定数组元素

java - 如何在单个查询对象 Mongodb Spring 数据中添加 or & 和 Criteria 子句

Javascript:for循环中的 map 总是返回最后一项

javascript - LI 中的 Scriptaculous Ajax.Autocompleter 额外功能

javascript - Dust.js 中的动态键名

node.js - Google Sheets API 导致 Node 出现 "GoogleAuth is not a constructor"错误

javascript - 使用 node.js 从 KML 文件获取数据