我有一组文档,其中每个文档都有一系列主题。我希望能够找到user_id在列表中的唯一主题。
示例文档存储:
{
"user_id" : "1",
"subjects" : [
123,
456,
789
]
}
{
"user_id" : "2",
"subjects" : [
789,
111,
555
]
}
{
"user_id" : "3",
"subjects" : [
123,
111
]
}
所以我可能想要user_id所在的所有唯一主题(1,2),结果将是:
{
"subjects" : [
123,
456,
789,
111,
555
]
}
我将如何实现这一目标?
答案 0 :(得分:2)
您可以使用distinct
查询执行此操作:
db.test.distinct('subjects', {user_id: {$in: ['1', '2']}})
第一个参数是获取不同值的字段,第二个参数选择执行此操作的文档。
答案 1 :(得分:0)
db.test.aggregate(
{
$match: // filters results based on the list of IDs
{
user_id: { $in: [ "1", "2" ] }
}
},
{
$unwind: "$subjects" // unwinds the `subjects` array
},
{
$group: // groups the unwound elements back into a single array
{
_id: 1,
subjects: { $addToSet: "$subjects" }
}
},
{
$project: { subjects: 1, _id: 0 }
}
)
将返回:
{ "subjects" : [ 555, 111, 789, 456, 123 ] }