如何通过猫鼬(javascript)中的多个值查询数组内的对象?
Posted
技术标签:
【中文标题】如何通过猫鼬(javascript)中的多个值查询数组内的对象?【英文标题】:How to query an object inside an array by multiple value in mongoose (javascript)? 【发布时间】:2021-07-20 18:57:43 【问题描述】:我有一个对象,服务器将收到一个user_id
和一个part_id
。我需要获取特定用户,然后通过提供的部件 ID 过滤部件并获取价格。
我尝试运行以下命令,但忽略了 part_id
过滤器并返回数组中的每个部分。
Custumers.findOne('user_id': '13', 'parts.part_id': 'P456')
也尝试了聚合,但仍然没有运气。
Customers.aggregate([
$match: 'user_id': '13'
]).unwind('parts')
我查看了 mongoose 文档,但无法理解它。请让我知道我缺少什么。
猫鼬版本:5.12.4
【问题讨论】:
【参考方案1】:选项 - 1
如果您只有 1 个匹配的部分,这将起作用
$ (projection)
$ 运算符根据查询语句中的某些条件将每个文档中的第一个匹配数组元素投影到集合中。
演示 - https://mongoplayground.net/p/tgFL01fK3Te
db.collection.find(
"user_id": "13", "parts.part_id": "P456" ,
"parts.$": 1, car_name: 1 // add fields you need to projection
)
选项-2
$unwind
演示 - https://mongoplayground.net/p/_PeP0WHVpJH
db.collection.aggregate([
$match:
"user_id": "13",
"parts.part_id": "P456"
,
$unwind: "$parts" // break into individual documents
,
$match:
"parts.part_id": "P456"
])
【讨论】:
谢谢,过滤效果很好,只返回所需的部分,但是当我尝试访问stats
时,它给出了 undefined
检查添加到投影 - mongoplayground.net/p/Zx5qNT8FW3F
谢谢 Tushar,这就是我要找的那个。
@TKX 很高兴它有帮助:)以上是关于如何通过猫鼬(javascript)中的多个值查询数组内的对象?的主要内容,如果未能解决你的问题,请参考以下文章