使用mongodb,如何返回具有一个公共字段的唯一列表?

使用mongodb,如何返回具有一个公共字段的唯一列表?,mongodb,unique,distinct,aggregation-framework,Mongodb,Unique,Distinct,Aggregation Framework,我正在尝试返回同一用户/作者的唯一标题列表。我曾经 posts.find( {'student':用户,'class_number':0} ).sort('created',-1).limit(num).toArray(函数(err,items){ 只要存在“class\u number”(类别编号),它就可以正常工作:0,可能并不总是存在。因此我尝试使用distinct,但我不确定如何提供对唯一标题的查询。有没有更好的方法?以下是一些数据: posts.distinct( {'student

我正在尝试返回同一用户/作者的唯一标题列表。我曾经

posts.find(
{'student':用户,'class_number':0}
).sort('created',-1).limit(num).toArray(函数(err,items){
只要存在
“class\u number”(类别编号),它就可以正常工作:0
,可能并不总是存在。因此我尝试使用
distinct
,但我不确定如何提供对唯一标题的查询。有没有更好的方法?以下是一些数据:

posts.distinct(
{'student':用户,'title':?}
)
.sort('created',-1).limit(num).toArray(函数(err,items){
数据:

{
“_id”:ObjectId(“53aa0093e99034914b000003”),
“ans”:1,
“作者”:“niko”,
“类别编号”:1,
“评论”:[…],
“复制”:错误,
“已创建”:1403650195222,
“当前”:“当前”,
“熟记”:1,
“permalink”:“newtest_106677414836872”,
“rem”:257,
“学生”:“niko”,
“标签”:[],
“标题”:“新测试”
}
{
“_id”:ObjectId(“53aa0093e99034914b000004”),
“ans”:1,
“作者”:“niko”,
“类别编号”:2,
“评论”:[…],
“复制”:错误,
“已创建”:1403650195253,
“当前”:“当前”,
“熟记”:1,
“permalink”:“newtest_91237262691445”,
“rem”:603,
“学生”:“niko”,
“标签”:[],
“标题”:“新测试”
}
{
“_id”:ObjectId(“53aa0093e99034914b000002”),
“ans”:2,
“作者”:“niko”,
“类别编号”:0,
“评论”:[…],
“复制”:错误,
“已创建”:1403650195217,
“当前”:“当前”,
“熟记”:1,
“permalink”:“newtest_5614600780868”,
“rem”:391,
“学生”:“niko”,
“标签”:[],
“标题”:“新测试”
}
{
“标题”:“摇滚乐”,
“作者”:“niko”,
“学生”:“niko”,
“当前”:“当前”,
“permalink”:“Rocki_44917561926464”,
“标签”:[],
“评论”:[…],
“已创建”:1403673810202,
“熟记”:1,
“ans”:1,
“rem”:1,
“复制”:错误,
“类别编号”:0,
“_id”:ObjectId(“53aa5cd2ff9163968f000002”)
}
{
“标题”:“摇滚乐”,
“作者”:“niko”,
“学生”:“niko”,
“当前”:“当前”,
“permalink”:“Rocki_687800166996”,
“标签”:[],
“评论”:[…],
“已创建”:1403673810204,
“熟记”:1,
“ans”:1,
“rem”:1,
“复制”:错误,
“类别编号”:1,
“_id”:ObjectId(“53aa5cd2ff9163968f000003”)
}

如果您希望将“学生”与“作者”匹配,那么您一次完成这项任务的最佳选择是:

db.collection.aggregate([
{“$组”:{
“_id”:{
“用户”:{
“$cond”:[
{“$eq”:[“$student”、“$author”]},
“$student”,
假的
]
},
“标题”:“$title”
}
}},
{“$match”:{“\u id.user”:{“$ne”:false}}
])
因此,将“用户”和“标题”的所有“不同”组合放在一起,同时在运算符下有条件地评估这些字段是否匹配

just过滤掉那些用户匹配为
false
的不同“标题”