0

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" }

これらはどれも機能しません。私はこれで何が間違っているのですか?

4

1 に答える 1

2
  1. {"users":4} は、4 に等しい users フィールド、または 4 に等しい要素を含む配列に等しい users フィールドを持つドキュメントのみを検索します。

  2. {"users.user_id":4} は、users オブジェクトの直下に user_id があれば機能しますが、"4" の下にあるため、一致しません。

  3. { "users.*.user_id" : "4" } mongodb にそのようなワイルドカード機能があるとは思いません。

上記のレコードを取得するには、次を試してください。

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


編集: 「users」の下の「4」が user_id と同じ場合は、次のクエリを試すこともできます。

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

于 2013-01-01T15:59:16.747 に答える