我如何使用当前值和 MONGODB 中的条件更新内部数组中的值?

How i can update value in inner array using current value with criteria in MONGODB?

我有一个带有内部字符串数组的小型 mongo 集合。

{ 
    "_id" : ObjectId("62853dc84409dcc9213f8bca"), 
    "test" : [
        "aaaa", 
        "bbb", 
        "ccc"
    ]
}
{ 
    "_id" : ObjectId("62853dd74409dcc9213f8bcb"), 
    "test" : [
        "aaa", 
        "bbbb", 
        "ddddd"
    ]
}

如何使用当前值修改具有字符串长度标准的数组中的内部值? 例如,我想将 * 连接到所有长度为 3 的元素。

结果一定是。

{ 
    "_id" : ObjectId("62853dc84409dcc9213f8bca"), 
    "test" : [
        "aaaa", 
        "bbb*", 
        "ccc*"
    ]
}
{ 
    "_id" : ObjectId("62853dd74409dcc9213f8bcb"), 
    "test" : [
        "aaa*", 
        "bbbb", 
        "ddddd"
    ]
}

我有一些代码,但没有给出结果。

db.studs.updateMany(
    {}, 
    { $set: {"test.$[element]": { "$concat": ["element", " ", "*"]}}},
    { arrayFilters: [{"element": {"$strLenCP": {"$eq": 3}}}]})

查询

  • 你需要 $concat 这是一个聚合运算符
  • 你可以通过管道更新来做到这一点 MongoDB >= 4.2
  • 映射并检查大小,如果size=3 concat "*",否则不要改变数组的成员

*您尝试使用更新运算符来完成,但我们不能混合聚合和更新运算符,我们要么进行管道更新,要么进行正常更新

Playmongo

db.studs.update({},
[{"$set": 
   {"test": 
     {"$map": 
       {"input": "$test",
        "in": 
         {"$cond": 
           [{"$eq": [{"$strLenCP": "$$this"}, 3]},
             {"$concat": ["$$this", "*"]}, "$$this"]}}}}}],
{"multi": true})