如何使用mongo匹配子字符串数组和字符串数组?

时间:2015-01-27 14:00:13

标签: regex mongodb mongodb-query

我有以下收集结构 -

{
    "_id": ObjectId("54c784d71e14acf9ae833f9f"),
    "vms": [
    {
        "name": "ABC",
        "ids": [
            "abc.60a980004270457730244662385a4f69",
            "abc.60a980004270457730244662385a4f6d"
        ]
    },
    {
        "name": "PQR",
        "ids": [
            "abc.6d867d9c7acd60001aed76eb2c70bd53",
            "abc.60a980004270457730244662385a4f6d"
        ]
    },
    {
        "name": "XYZ",
        "ids": [
            "abc.600605b00237d91016cdc38f376bd31d",
            "abc.600605b00237d91016cdc38f376cd32f"
        ]
    }
    ]
}

我有一个包含ids子串的数组。这是一个供您参考的数组 -

myArray = [ "4270457730244662385a4f69","4270457730244662385a4f6d" , "4270457730244662385a4f6b"]

我想发现myArray的每个元素在ids中都没有使用mongo作为子字符串。

目前,我可以在mongo中使用regex找到单个元素。 在上面的例子中,我希望输出为:

[
    {
    "name": "XYZ",
    "ids": [
        "abc.600605b00237d91016cdc38f376bd31d",
        "abc.600605b00237d91016cdc38f376cd32f"
    ]
    }
]

如何使用mongo ??

在数组中找到子字符串

1 个答案:

答案 0 :(得分:0)

可以使用正则表达式来完成。您可以使用运算符匹配多个子字符串的字符串。正则表达式中|。在wikipedia

上搜索'Boolean'或''

使用聚合的MongoDB查询:

db.collection_name.aggregate([
    {$unwind: "$vms"},
    {$match: {
        "vms.ids": {$not: /.*(4270457730244662385a4f69|4270457730244662385a4f6d|4270457730244662385a4f6b).*/}}
    }
])

输出

{
    "_id" : ObjectId("54c784d71e14acf9ae833f9f"),
    "vms" : {
        "name" : "XYZ",
        "ids" : [
            "abc.600605b00237d91016cdc38f376bd31d",
            "abc.600605b00237d91016cdc38f376cd32f"
        ]
    }
}