MongoDB的复杂查询

时间:2016-04-27 04:19:44

标签: mongodb

我查了一下MongoDB的手册,但找不到合适的解决方案来进行以下搜索:

文件结构:

{
    "_id" : ObjectId("57201082e92c07baef62452a"),
    "user_id" : 1,
    "profile" : [ 
        {
            "date" : ISODate("2012-10-11T12:58:06.000Z"),
            "content" : [ 
                {
                    "feature_id" : 1,
                    "feature_value" : true
                }
            ]
        },
        {
            "date" : ISODate("2013-04-12T8:23:09.000Z"),
            "content" : [ 
                {
                    "feature_id" : 1,
                    "feature_value" : false
                }
            ]
        }
    ]
}

我想得到的是给定feature_value和给定user_id最新 feature_id

有没有办法用MongoDB来实现这个目标?

感谢。

2 个答案:

答案 0 :(得分:1)

假设最新的(作为profile.date),您可以使用以下内容来获得所需的结果。(查询未测试,希望它有效。)

db.test.aggregate(
[
  {$match : {"user_id" : 1}},
  {$unwind : "$profile"},
  {$unwind : "$profile.content"},
  {$match : {"profile.content.feature_id" : 1}},
  {$sort : {"profile.date" : -1}},
  {$limit : 1},
  {$group:{_id : "$_id", content : {$push:"$profile.content"}}}
 ])

答案 1 :(得分:0)

请试试这个:

db.test.aggregate(
{$match:{"user_id" :1,"profile.content.feature_id":1}},
{$project:{"profile.content.feature_value":1}},
{$sort:{"profile.date" :-1}},
{$limit : 1});