【问题标题】:MongoDB: Update an array using FindAndUpdate()MongoDB:使用 FindAndUpdate() 更新数组
【发布时间】:2016-05-11 21:20:30
【问题描述】:

我有这个代码

{
    "_id" : ObjectId("573308a2519d9ff8820e7be8"),
    "id" : "Example",
    "Test" : [ 
        "InsertB1",
        "InsertB2"
    ],
    "num" : 2
}

我想使用函数findAndUpdate,因为我想

  • "InsertB1" 更改为"UpdateB1"
  • "num" 从 2 增加到 3。

我已经写了这个,但是不行……

db.Collection.findAndModify({
    query: {
        id:"Example",
        num:{ $lt: 3 }
    },
    update: {
        id:"Example", 
        Test: "InsertB1",
         $set: { "Test.$": "Update1" },
         $inc: { num: 1 }
    },
    upsert:true,
    new:true
}) 

如何修改我的代码?

【问题讨论】:

  • 你为什么使用findAndUpdate
  • 因为在我完成更改后我还想将“num”从 2 增加到 3...你认为我可以使用其他策略吗?
  • 需要退回修改后的文件还是原文件(修改前的文件)?

标签: mongodb findandmodify


【解决方案1】:

您忘记在查询中包含要更新的数组元素。 $ 指的是查询中第一个匹配的数组元素,如果要更新“InsertB1”,则必须添加它。

试试这个

var oldDoc = db.Collection.findAndModify({
  query: {
    id:"Example", 
    num: {$lt:3}, 
    Test: "InsertB1"
  }, 
  update: {
    $set : {"Test.$": "Update1"}, 
    $inc: {num : 1 }}
 },
 upsert: true)

如果不需要返回旧(或新)文档,您可以坚持更新命令

db.Collection.update({
  id:"Example", 
  Test: "InsertB1",
  num: {$lt:3}
},{
  $set : { "Test.$": "Update1"}, 
  $inc: {num : 1}
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-13
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    相关资源
    最近更新 更多