查询MongoDB的嵌套数组

时间:2018-07-03 04:06:16

标签: mongodb

需要使用格式化嵌套数组的搜索参数来格式化查询以查找/获取值的帮助。

我有一个收藏集

[
    {
        "_id": "5b3ad55f66479332a0482961",
        "timestamp": "2018-06-17T00:30:00.000Z",
        "deviceid": "123456",
        "values": [
            {
                "minval": 1,
                "minvalues": [
                    {
                        "secval": 51,
                        "secvalues": {                            
                            "alt": "300",
                            "mcc": "404",
                            "mnc": "46",
                            "priority": 1
                        }
                    },
                    {
                        "secval": 52,
                        "secvalues": {                            
                            "alt": "300",
                            "mcc": "404",
                            "mnc": "46",
                            "priority": 1
                        }
                    },                                        
                    {
                        "secval": 56,
                        "secvalues": {
                            "alt": "300",
                            "mcc": "404",
                            "mnc": "46",
                            "priority": 0
                        }
                    }
                ]
            }
        ]
    }
]

需要以下内容,搜索属性为“ values.minvalues.secvalues.priority”

[
    {
        "_id": "5b3ad55f66479332a0482961",
        "timestamp": "2018-06-17T00:30:00.000Z",
        "deviceid": "123456",
        "values": [
            {
                "minval": 1,
                "minvalues": [                    
                    {
                        "secval": 56,
                        "secvalues": {
                            "alt": "300",
                            "mcc": "404",
                            "mnc": "46",
                            "priority": 0
                        }
                    }
                ]
            }
        ]
    }
]

我尝试了以下查询,但没有成功

dbRetval.db('ls_gpsdatabase').collection('gpsevent').aggregate([
            { "$match": { "deviceid": { "$in": idList}}},
            { "$sort": { "_id": -1} },
            {"$unwind":"$values.minvalues.secvalues"},
            //{"$project":{"deviceid":1,"values.minvalues.secvalues.lat":1,"values.minvalues.secvalues.min":1}} ,
            { "$match": { "values.minvalues.secvalues.priority": { "$eq": 1}}},
            { "$group": { "_id": "$deviceid" , "doc": { "$push": "$values.minvalues.secvalues" }}} ]).toArray();

如果有什么可以帮助的,那就太好了。

1 个答案:

答案 0 :(得分:0)

您可以使用$addFields替换现有字段。由于您有两层嵌套数组,因此可以将$map用于外部,将$filter用于内部以检查条件:

sendDataToFirebase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                myRef.child("0").child(userName.getText().toString()).setValue(writeName.getText().toString());
                //myRef.child("NAME:").setValue("Kathmandu University");

                myRef.child("0").child(dateOfBirth.getText().toString()).setValue(enterDateOfBirth.getText().toString());
                Intent i = new Intent(JobSignup.this, HomeActivity.class);
                startActivity(i);

            }
        });