Mongoose 如果存在更新则获取集合数据,否则插入

Posted

技术标签:

【中文标题】Mongoose 如果存在更新则获取集合数据,否则插入【英文标题】:Mongoose get collection data if present the update otherwise insert 【发布时间】:2016-09-16 11:08:01 【问题描述】:

我是 mongodb 和 ExpressJS 的新手。这可能是一个简单的问题,但我没有成功。

var BookCounter = new Schema(
    counter: type: Number,,
    book: type: String, min: 18
);

这是我的架构,以下是我的问题:

我想检查 xyz 书是否存在

如果有书

那么我必须将图书计数器更新一。

否则

我必须插入新书。

你能帮帮我吗..

提前致谢:)

【问题讨论】:

【参考方案1】:

您需要更新操作 findOneAndUpdate(),如果文档不存在,则使用选项 upsertnew 选项如果设置为 true,则返回新创建/修改的文档而不是原始文档,以及 $set$inc 字段更新运算符。

以下示例演示了这一点:

var query =  "book": "xyz" ,
    update =  "$inc":  "counter": 1  ,
    options =  "upsert": true, "new": true ;

// Find the document
Book.findOneAndUpdate(query, update, options, function(err, result) 
    if (err) handleError(err);    
    else 
        // do something with the document
        console.log(JSON.stringify(result, null, 4));
    
);

【讨论】:

以上是关于Mongoose 如果存在更新则获取集合数据,否则插入的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:过滤,如果存在则更新文档,否则创建它

Mongoose/MongoDB 如果不存在则基于 Schema 创建集合

如果未找到值,则使用 mongoose 将对象添加到数组中,否则更新字段

Mongoose findOneAndUpdate() 仅在文档​​已存在时更新,如果不存在则不创建新文档?

SAS:如果存在则更新数据集,否则创建它

如果存在则更新列数据,否则在 mysql 查询中保持不变