查询MongoDB嵌入式阵列

时间:2013-01-01 15:51:36

标签: mongodb

我在尝试查询Mongo中的字段时遇到了一些麻烦。我的文档如下:

{
    "short_url": "DTsB9k",
    "long_url": "http://www.example.com",
    "date_created": {
        "$date": "2013-01-01T14:10:29.899Z"
    },
    "ips": {
        "24.184.209.227": {
            "ip_address": "12.34.56.78",
            "clicks": [
                {
                    "click_date": {
                        "$date": "2013-01-01T14:10:41.784Z"
                    },
                    "click_referrer": null
                },
                {
                    "click_date": {
                        "$date": "2013-01-01T14:31:32.440Z"
                    },
                    "click_referrer": null
                }
            ]
        }
    },
    "users": {
        "4": {
            "user_id": "4",
            "date_added": {
                "$date": "2013-01-01T14:10:29.899Z"
            },
            "creator": true
        }
    },
    "total_clicks": 2,
    "_id": {
        "$oid": "50e2ee55569df0b469000000"
    }
}

我正在尝试查询user_id,最终会有多个。但我试过了

{ "users" : "4" }
{ "users.user_id" : "4" }
{ "users.*.user_id" : "4" }

这些都不起作用。我在这做错了什么?

1 个答案:

答案 0 :(得分:2)

  1. {“users”:4}只能查找用户字段等于4的文档,或者用户字段等于包含等于4的元素的数组

  2. {“users.user_id”:4}如果您的user_id直接位于users对象下,但它位于“4”之下,那么它将无法匹配

  3. {“users。*。user_id”:“4”}我不认为mongodb有这样的通配符功能。

  4. 要获取上述记录,您可以尝试:

    {"users.4.user_id": "4"}


    编辑: 如果“users”下的“4”与user_id相同,您也可以尝试查询:

    {"users.4":{$exists:true}}