在mongoDB中搜索JSON文档以获取跨数组元素的值

时间:2014-10-01 08:28:56

标签: arrays mongodb

我有一些复杂的文档(对mongodb模式是新的,我认为它是完全文本),我正在尝试处理文档的不同数组部分的特定数组值匹配。

我的文档的示例内容:

    {  
"_id" : ObjectId("541c0c9bdfecb53368e12ef0"),  
"SRVIP" : "10.10.10.10",  
"INSNME" : "myinstance",  
"DBNAME" : "mydbname",  
"DBGRPL" : [{  
        "GRPNME" : "grp1",  
        "GRPPRV" : "7",  
        "GRPAUT" : [ “AUTH1”,”AUTH2”],  
        "GRPUSR" : [    "USER1",”USER2”]  
    }  
],  
"SAUTLV" : [    { "SAUNME" : "USER4",  
           "SAUPRV" : "0",  
           "SAUAUT" : [ “AUTH2”,”AUTH3”],  
            "SAUUSR" : [ "USER2" ]  
    }  
],  
"USRLVL" : [  
{ "ULVNME" : "USER1",  
              "ULVPRV" : "0",  
              "ULVAUT" : [ "AUTH1","AUTH2","AUTH3"]  
        },  
        {  
    "ULVNME" : "USER2",  
            "ULVPRV" : "2411",  
            "ULVAUT" : [ "AUTH3"]  
        }  
    ]  
} 

我正在尝试仅返回文档中存在例如USER1的部分 目前,我已经创建了两个不同的聚合语句来检索信息,但我正在查看单个语句来搜索文档中的所有数组。

Retrieving USER1 statement on DBGRPL array level : 

var var1=[“USER1”]
db.authinfo.aggregate({$unwind:"$DBGRPL"},{$match:{"DBGRPL.GRPUSR":{$in:var1}}},{$project:{SRVIP:1,DBNAME:1,"DBGRPL":1}})

var var1=”USER1”
Retrieving USER1 statement on USRLVL array level:
db.authinfo.aggregate({$unwind:"$USRLVL"},{$match:{"USRLVL.ULVNME":var1}},{$project:{SRVIP:1,DBNAME:1,"USRLVL":1}}) 

上述方法的明显错误是使用2种不同的变量类型来使查询起作用,这也是我目前无法解决的问题....

如何将搜索结合到单个语句中?

预期产出:

{  
"_id" : ObjectId("541c0c9bdfecb53368e12ef0"),  
"SRVIP" : "10.10.10.10",  
"INSNME" : "myinstance",  
"DBNAME" : "mydbname",  
"DBGRPL" : [{  
        "GRPNME" : "grp1",  
        "GRPPRV" : "7",  
        "GRPAUT" : [ “AUTH1”,”AUTH2”],  
        "GRPUSR" : [    "USER1",”USER2”]  
    }  
],  
"USRLVL" : [  
{ "ULVNME" : "USER1",  
              "ULVPRV" : "0",  
              "ULVAUT" : [ "AUTH1","AUTH2","AUTH3"]  
        }  
        {  
    ]  
} 

搜索USER1时。

我还将搜索文档的GRPAUTH,SAUAUT和ULVAUTH部分,其中AUTH1是值...

0 个答案:

没有答案