0

我正在使用 mongodb 做项目。所以在这里我只需要检索在文档元素数组上搜索的文档的选定字段。这是我的例子。

{
        "_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. 如果文档中的事件可以超过 1个,恐怕您只能使用以下方法获取每个匹配文档的第一个匹配子文档$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 回答