我的数据结构是这样的:
[
{
"_id": "1",
"title": "Yamaha",
"data": "Sed ut perspiciatis",
"type": "Bike"
},
{
"_id": "2",
"title": "Pulsar",
"data": "Quis autem vel eum",
"type": "Bike"
},
{
"_id": "3",
"title": "Tesla Model Y",
"data": "because it is pleasure",
"type": "Car"
},
{
"_id": "4",
"title": "Harley-Davidson",
"data": "praising pain was born",
"type": "Bike"
},
{
"_id": "6",
"title": "Mustang",
"data": "non numquam eius",
"type": "Car"
},
{
"_id": "7",
"title": "BMW",
"data": "Man of Culture",
"type": "Car"
}
]
Now,From FrontEnd用户可以搜索任何条目使用它们的惟一的_id
,如:
db.collection.find({_id: "3" })
返回以下内容:
[
{
"_id": "3",
"data": "because it is pleasure",
"title": "Tesla Model Y",
"type": "Car"
}
]
问题部分:
现在,包括上面返回的文档,我还想返回那些文档它有匹配的type
价值。My Questions的意思是;如果用户正在寻找任何文件与他们的特定_id
。假设3然后它应该返回以下内容:
查找具有唯一_id
的物品and$group
type
字段值
[{
"_id": "3",
"title": "Tesla Model Y",
"data": "because it is pleasure",
"type": "Car"
}
{
"_id": "6",
"title": "Mustang",
"data": "non numquam eius",
"type": "Car"
},
{
"_id": "7",
"title": "BMW",
"data": "Man of Culture",
"type": "Car"
}]
这可能吗?是否可以$group
finding By Id
?后的文件。我试过好几种方法,但都没用。任何建议都会对这个复杂的需求有帮助
:)
- 查找它自己,只与id=3的类型连接。
- 空连接结果=>不同的类型,所以它们被过滤掉了
此处测试代码
db.collection.aggregate([
{
"$lookup": {
"from": "collection",
"let": {
"type": "$type"
},
"pipeline": [
{
"$match": {
"$expr": {
"$and": [
{
"$eq": [
"$_id",
"3"
]
},
{
"$eq": [
"$$type",
"$type"
]
}
]
}
}
}
],
"as": "joined"
}
},
{
"$match": {
"$expr": {
"$ne": [
"$joined",
[]
]
}
}
},
{
"$unset": [
"joined"
]
}
])
你基本上混合了两个独立的查询:
- 按ID获取物品-返回单个项目
- 获取与第一个项目类型相同的项目列表-返回项目列表
由于查询的不同,没有非常直接的方法来执行此操作。当然,您可以使用$aggregate来完成此任务,但从逻辑上讲,您仍然需要从数据库中查询相当多的内容,并且必须更深入地进行优化。
只要你不查询数以千万计的记录,为了简单起见,我建议你一个接一个地执行这两个查询。