我查了一下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来实现这个目标?
感谢。
答案 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});