MongoDB-通过id查找文档,然后将其与key分组



我的数据结构是这样的:

[
{
"_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$grouptype字段

[{
"_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"
}]

这可能吗?是否可以$groupfinding 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"
]
}
])

你基本上混合了两个独立的查询:

  1. 按ID获取物品-返回单个项目
  2. 获取与第一个项目类型相同的项目列表-返回项目列表

由于查询的不同,没有非常直接的方法来执行此操作。当然,您可以使用$aggregate来完成此任务,但从逻辑上讲,您仍然需要从数据库中查询相当多的内容,并且必须更深入地进行优化。

只要你不查询数以千万计的记录,为了简单起见,我建议你一个接一个地执行这两个查询。

相关内容

  • 没有找到相关文章

最新更新