mongodb 没有则插入,有则更新其中某列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb 没有则插入,有则更新其中某列相关的知识,希望对你有一定的参考价值。

参考技术A 这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下映射(projection)声明用来限制所有查询匹配文档的返回字段。projection以文档的形式列举结果集中要包含或者排除的字段。可以指定要包含的字段(例如:{field:1})或者指定要排除的字段(例如:{field:0})。默认_id是包含在结果集合中的,要从结果集中排除_id字段,需要在projection中指定排除_id字段({_id:0})。除了_id字段,不能在一个projection中联合使用包含和排除语意。返回匹配文档的所有字段:如果没有指定projection,find()方法返回所有匹配文档的所有字段。复制代码代码如下:db.inventory.find(type:'food')这个例子将返回inventory集合中type字段的值为"food"的所有文档,返回的文档包含全部字段。返回指定字段和_id字段:一个projection可以明确地指定多个字段。下面的操作中,find()方法返回匹配的所有文档。在结果集中,只有item和qty字段,默认_id字段也是返回的。复制代码代码如下:db.inventory.find(type:'food',item:1,qty:1)仅返回指定字段:可以通过在projection中指定排除_id字段将其从结果中去掉,如下例子所示:复制代码代码如下:db.inventory.find(type:'food',item:1,qty:1,_id:0)返回除排除掉以外的字段:可以使用一个projection排除一个或者一组字段,如下:复制代码代码如下:db.inventory.find(type:'food',type:0)这个操作返回所有type字段值为food的文档,在结果中type字段不返回。数组字段的projection:$elemMatch和$slice运算符是对数组进行projection的唯一途径。

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

【中文标题】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));
    
);

【讨论】:

以上是关于mongodb 没有则插入,有则更新其中某列的主要内容,如果未能解决你的问题,请参考以下文章

有则更新无则插入(mySql,oracle)

批量插入数据库数据,有则更新,无则追加

Mybatis 有则更新,无则插入的实现

mysql更新字段记录没有则添加

MongoDB原子“findOrCreate”:findOne,如果不存在则插入,但不更新

Mongodb如何仅在不存在时插入(如果存在则不更新)?