2

以下はmongodbの私のコレクションです-

{
    "_id" : ObjectId("50f69176904e1d66affec20d"),
    "connections" : [
    {
        "id" : "50f651a3b58bba7fbec2f222"
    },
    {
        "group" : "Roomies",
        "users" : [
        {
            "id" : "50f651a3b58bba7fbec2f222"
        },
        {
            "id" : "50f651b8b58bba7fbec2f223"
        }
        ]
    },
    {
        "group" : "College",
        "users" : [
        {
            "id" : "50f651b8b58bba7fbec2f223"
        },
        {
            "id" : "50f651a3b58bba7fbec2f222"
        }
        ]
    },
    {
        "group" : "Work",
        "users" : [
        {
            "id" : "50f651a3b58bba7fbec2f222"
        }
        ]
    },
],
"email" : "arunko350@gmail.com",
"name" : "Arun"
}

ここでは、id = 50f651a3b58bba7fbec2f222 が存在するすべてのグループ名を取得したいと考えています。私を助けてください。解決策を2日間閲覧しています。

4

2 に答える 2

2

これは、MongoDB 2.2 の集計フレームワークで実行できます。シェル内:

db.test.aggregate([
      // Duplicate the docs, one per connections array element.
      {$unwind: '$connections'},
      // Only include the docs with the specified user id
      {$match: {'connections.users.id': '50f651a3b58bba7fbec2f222'}},
      // Bring group out to the only top level field and exclude _id
      {$project: {_id: 0, group: '$connections.group'}}
])

出力:

{
  "result": [
    {
      "group": "Roomies"
    },
    {
      "group": "College"
    },
    {
      "group": "Work"
    }
  ],
  "ok": 1
}
于 2013-01-21T15:57:19.407 に答える
-1

$elemMatch 演算子は、配列要素の射影に使用できます。

http://docs.mongodb.org/manual/reference/projection/elemMatch/#_S_elemMatch

以下は大丈夫なはずです

var projection = {"connections.group":1, "connections":{$elemMatch: {"users.id":"507c35dd8fada716c89d0013"}}}

db.collection.find( {{"connections.users.id": "507c35dd8fada716c89d0013"}}, projection);
于 2013-01-21T08:35:45.033 に答える