mongoose MongoDB -减少嵌套对象中的某个值,但不要让它低于0

uz75evzq  于 2023-01-09  发布在  Go
关注(0)|答案(1)|浏览(97)

我的MongooseSchema(简化):

_id: (ObjectId)
storage: [
    {
        location: String
        storedFood:[
            {
             "name": String
             "code": String
             "weight": Number
            }
        ]     
    }
]

我想减少的重量,但不低于0.There is a stackoverflow answer that does this(第二个答案从@rpatel).太好了!这里的问题是,他使用了一个更新管道没有嵌套的文档.我没有找到一个源代码,我可以学习一些关于mongdob管道和嵌套对象(如果你有任何请让我知道,我真的很想学习复杂的管道)
这里有人能修改下面的代码来减少weight吗?其中location等于"Dubai",code等于"38102371982"。
来自@rpatel的代码:
Mongo-Playground
示例-文档:
x一个一个一个一个x一个一个二个x
A ready playground.

yvfmudvl

yvfmudvl1#

一种选择是将double $map$cond一起使用,以便进入双重嵌套数组项:

db.collection.update(
  {storage: {$elemMatch: {location: wantedLoc}}},
  [{$set: {
      storage: {
        $map: {
          input: "$storage",
          as: "st",
          in: {$cond: [
              {$eq: ["$$st.location", wantedLoc]},
              {location: "$$st.location",
                storedFood: {$map: {
                    input: "$$st.storedFood",
                    in: {$cond: [
                        {$eq: ["$$this.code", wantedCode]},
                        {$mergeObjects: [
                          "$$this", 
                          {weight: {$max: [0, {$subtract: ["$$this.weight", reduceBy]}]}}
                        ]},
                        "$$this"
                    ]}
                  }
                }
              },
              "$$st"
          ]}
        }
      }
  }}]
)

了解它在playground example上的工作原理

相关问题