如何检查动态子字段密钥是否存在并使用正则表达式检查其值

时间:2018-07-13 06:48:42

标签: mongodb aggregation-framework

我正在使用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或类似方法,也许有更好的方法。记录太多,因此我正在寻找一种有效的方法来完成此任务。谢谢。

0 个答案:

没有答案