【发布时间】:2016-10-28 15:45:58
【问题描述】:
一些背景:
这涉及 3 个集合:
- 帖子
- 帖子子类别
- 后超类别
帖子中的文档示例:
{
"_id" : ObjectId("57fbf3ce7ccbc906ed87cef6"),
"__v" : 6,
"author" : ObjectId("57fbe2ac3cfb9e061df86ebb"),
"postSubCategories" : [
ObjectId("5806344baa0bbf284a2316e4")//reference to document in postsubcategories collection
],
"postSuperCategories" : [
ObjectId("580679958a5f5f448ba5aae9"),
ObjectId("580679958a5f5f448ba5aaf2")//references to documents in postsupercategories collection
],
"publishedDate" : ISODate("2016-10-10T04:00:00.000Z"),
"state" : "published",
"templateName" : ObjectId("57fbf3977ccbc906ed87cef3"),
"title" : "My title",
"topics" : []}
我的查询是
db.posts.aggregate([
{'$unwind':
{'path':"$postSubCategories"}
},
{'$lookup': {
'from':"postsubcategories",
'localField': "postSubCategories",
'foreignField': "_id",
'as': "subObject"
}},
{'$unwind':
{'path':"$postSuperCategories"}
},
{'$lookup': {
'from':"postsupercategories",
'localField': "postSuperCategories",
'foreignField': "_id",
'as': "superObject"
}},
{'$match': {
'$or':
[{ "subObject.searchKeywords": "home monitor" },
{ "superObject.searchKeywords": "home monitor" }]
}
},
{'$match': {
"state": "published"
}}
postsubcategories 和 postsupercategories 集合都包含一个名为 searchKeywords 的字段,该字段是其文档中的文本数组。我希望能够查询那些 searchKeywords 字段并返回匹配的帖子文档。我需要一组经过重复数据处理的返回 _id。
该查询返回四个文档。示例:
ObjectId("57fbf3ce7ccbc906ed87cef6")
ObjectId("57fbf3ce7ccbc906ed87cef6")
ObjectId("57fbf40b7ccbc906ed87cef7")
ObjectId("57fbf40b7ccbc906ed87cef7")
我明白它为什么返回 4。一个文档包含 postSubCategories 对象 5806344baa0bbf284a2316e4 和 postSuperCategories id 580679958a5f5f448ba5aae9。
第二个文档包含 postSubCategories 对象 5806344baa0bbf284a2316e4 和 postSuperCategories 580679958a5f5f448ba5aaf2。第二个帖子重复此操作
有没有一种方法可以根据返回的 _id 进行“重复数据删除”?
我的最终结果是:ObjectId("57fbf3ce7ccbc906ed87cef6")
ObjectId("57fbf40b7ccbc906ed87cef7")
我知道从技术上讲,4 个列表中的 2 个匹配的 _id 并不完全相同,因为它们每个都包含不同的 postSuperCategories 对象,但此时我不再关心该字段,只需要一个单一的帖子文档因为我需要访问其他字段。
任何帮助将不胜感激。我曾尝试调查$group、$addToSet 和$setUnion,但到目前为止都没有成功。
【问题讨论】:
标签: mongodb mongoose mongodb-query aggregation-framework mongodb-aggregation