我正在使用MongoDB 3.6版。我正在尝试检查集合中是否存在子字段,并且其值是否与正则表达式规则匹配。我的收藏看起来像这样:
"_id" : ObjectId("5b44af395f95276ff7f7ad2a"),
"data": {
"field_to_check" : {
"111" : "500",
"222" : "550.89",
"333" : "575.12",
...
},
"field2" : {},
"field3" : {}
...
}
我有一个预定义的键数组
["222", "876", "456", "789", ...]
我正在尝试检查字段“ field_to_check”是否具有带有与数组中的键匹配的键的子字段,并且其值是否为整数。给定数组中只有一个“ field_to_check”字段关键字。如果条件为真,则将此值取整并用字符串表示法更新记录。长话短说:
db.myCollection.find(
// if "field_to_check" has child key $in: ["111", "333", "456", "789", ...]
// and if "field_to_check" key value matched $regex: ^(\d{1,}\.|\d{1,}\.\d{1,})$
).forEach(function(obj) {
db.myCollection.update(
{ _id : obj._id },
// The update shoud be done by dynamically selecting the correct key
{ $set: { "data.field_to_check.222" : Math.round(obj.data.field_to_check['222']) + '' }},
)
});
通过使用我无法想到的updateMany或类似方法,也许有更好的方法。记录太多,因此我正在寻找一种有效的方法来完成此任务。谢谢。