0

私はmongodbを使ってプロジェクトをやっています。したがって、ここでは、Document 要素の配列を検索して、ドキュメントの選択されたフィールドのみを取得する必要があります。これは私の例です。

{
        "_id": {
            "$id": "515ce66ca00b2aa30a000000"
        },
        "user_id": "user_1111",
        "events": [
            {
                "subject": "it test I",
                "start_date": "04/14/2013",
                "start_time": "8.00 AM",
                "end_date": "04/14/2013",
                "end_time": "10.30 AM",
                "all_day_event": "false",
                "discription": "no discription",
                "location": "STC",
                "private": "false",
                "time_zone": "IST",
                "alarm": "true",
                "alarm_threshold": "5",
                "status": "true"
            }
        ]
    }

ここでは、次の結果を取得する必要があります。

           {
                "subject": "it test I",
                "start_date": "04/14/2013",
                "start_time": "8.00 AM",
                "end_date": "04/14/2013",
                "end_time": "10.30 AM",
                "all_day_event": "false",
                "discription": "no discription",
                "location": "STC",
                "private": "false",
                "time_zone": "IST",
                "alarm": "true",
                "alarm_threshold": "5",
                "status": "true"
            }

検索する

{"events.subject":"it test I"} これを行う方法。私を助けてください。

4

1 に答える 1

0

あなたが望むことを行う簡単な方法があるかどうかはわかりませんが、次のことを試すことができます:

  1. イベントがドキュメント内で 1 つしかない場合は、射影を行うことができます。

    db.events.find({"events.subject":"it test I"},{events:1,_id:0}).pretty()
    {
        "events" : [
            {
                "subject" : "it test I",
                "start_date" : "04/14/2013",
                "start_time" : "8.00 AM",
                "end_date" : "04/14/2013",
                "end_time" : "10.30 AM",
                "all_day_event" : "false",
                "discription" : "no discription",
                "location" : "STC",
                "private" : "false",
                "time_zone" : "IST",
                "alarm" : "true",
                "alarm_threshold" : "5",
                "status" : "true"
            }
        ]
    }
    

    ただし、キーと値の形式で結果を取得できます。ドライバーを使用している場合は、おそらく、値を簡単に取得できます。

  2. イベントがドキュメント内で複数になる可能性がある場合、以下を使用して、一致するドキュメントごとに最初に一致するサブドキュメントしか取得できないと思います$elemMatch

    db.events.find({"events.subject":"it test I"},{events:{$elemMatch:{"subject":"it test I"}},_id:0}).pretty()
    

    いいえと同じ結果が得られます。1.

  3. 一致するすべてのドキュメントを取得するために使用できる集約フレームワークを試すことができます。

    db.events.aggregate(
    {$match: {"events.subject":"it test I"}},
    {$unwind: "$events"},
    {$match: {"events.subject":"it test I"}},
    {
      $project:{
        _id: 0,
        subject: "$events.subject",
        start_date: "$events.start_date",
        end_date: "$events.end_date",
        end_time: "$events.end_time",
        all_day_event: "$events.all_day_event",
        discription: "$events.discription",
        location: "$events.location",
        private: "$events.private",
        time_zone: "$events.time_zone",
        alarm: "$events.alarm",
        alarm_threshold: "$events.alarm_threshold",
        status: "$events.status"
      }
    })
    {
        "result" : [
            {
                "subject" : "it test I",
                "start_date" : "04/14/2013",
                "end_date" : "04/14/2013",
                "end_time" : "10.30 AM",
                "all_day_event" : "false",
                "discription" : "no discription",
                "location" : "STC",
                "private" : "false",
                "time_zone" : "IST",
                "alarm" : "true",
                "alarm_threshold" : "5",
                "status" : "true"
            }
        ],
        "ok" : 1
    }
    
于 2013-04-04T04:51:33.473 に答える