mongodb无法让查询工作

时间:2014-03-05 14:38:46

标签: mongodb

我正在尝试在mongodb中进行查询,但我无法让它工作。

我的文档看起来像这样。

{
    "_id" : ObjectId("5305e54133e65b7341d63af3"),
    "clients" : [ 
        {
            "aggregations" : {
                "department" : [ 
                    "department1", 
                    "department3"
                ],
                "customer" : "customer2"
            },
            "lastLogin" : ISODate("2014-02-26T09:41:56.445Z"),
            "locale" : "en"
            "name" : "Test",
            "validFrom" : null,
            "validTo" : null,
            "visiting" : {
                "phone" : "031-303030",
                "company" : "MyCompany",
                "office" : [ 
                    "jag är ett test", 
                     "lite mer data"
                ],
                "country" : "Norge"
            }
        }, 
        {
            "approvedEmailSent" : true,
            "lastLogin" : ISODate("2014-03-01T15:27:12.252Z"),
            "locale" : "en",
            "name" : "Test2",
            "visiting" : {
                "phone" : "031-307450",
                "company" : "Other Company",
                "branch" : "Advertising agency"
            }
        }
    ],
    "firstname" : "Greger",
    "lastname" : "Aronsson",
    "username" : "TheUsername"
}

正如您所看到的,用户可以拥有许多客户端。它们与名称相匹配。客户有访问公司,但有时情况并非如此。

我想查询clients.name为test和regexp for visting.company以及firstname,lastname的位置。如果我在Test2登录,我不希望访问.Company“MyCompany”。希望这是有道理的!

1 个答案:

答案 0 :(得分:0)

您可以编写如下查询:

db.visitCompany2.find({ $or : [
    {'clients.name': 'Test2'},       //Company name
    {'clients.visiting.company': {
        $regex: /Other/g          //Your visiting company regex
    }},
    {firstname: "Greger"},
    {"lastname": "Aronsson}"
]}, {
    'clients.$': 1,             //projection for clients
    firstname: 1,
    lastname: 1
});

输出:

{
    "_id": ObjectId("5305e54133e65b7341d63af3"),
    "clients": [{
        "approvedEmailSent": true,
        "lastLogin": ISODate("2014-03-01T15:27:12.252Z"),
        "locale": "en",
        "name": "Test2",
        "visiting": {
            "phone": "031-307450",
            "company": "Other Company",
            "branch": "Advertising agency"
        }
    }],
    "firstname": "Greger",
    "lastname": "Aronsson"
}