我如何使用当前值和 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 "*"
,否则不要改变数组的成员
*您尝试使用更新运算符来完成,但我们不能混合聚合和更新运算符,我们要么进行管道更新,要么进行正常更新
db.studs.update({},
[{"$set":
{"test":
{"$map":
{"input": "$test",
"in":
{"$cond":
[{"$eq": [{"$strLenCP": "$$this"}, 3]},
{"$concat": ["$$this", "*"]}, "$$this"]}}}}}],
{"multi": true})
我有一个带有内部字符串数组的小型 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"*"
,否则不要改变数组的成员
*您尝试使用更新运算符来完成,但我们不能混合聚合和更新运算符,我们要么进行管道更新,要么进行正常更新
db.studs.update({},
[{"$set":
{"test":
{"$map":
{"input": "$test",
"in":
{"$cond":
[{"$eq": [{"$strLenCP": "$$this"}, 3]},
{"$concat": ["$$this", "*"]}, "$$this"]}}}}}],
{"multi": true})