如何通过猫鼬(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 过滤部件并获取价格。

_id: 6086b8eec1f5325278846983, user_id: '13', car_name: '车名 1', created_at: 2008-11-25T00:46:52.000Z, 部分: [ _id: 6086ee212681320190c3c8e0, part_id: 'P456', part_name: '零件名称 1', image: '图片网址', 统计: 价格:10, , _id: 6087e7795e2ca925fc6ead27, part_id: 'P905', part_name: '零件名称 2', image: '图片网址', 统计: 价格:15, ]

我尝试运行以下命令,但忽略了 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)中的多个值查询数组内的对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬中执行“每个”查询

如何格式化此猫鼬 updateone 查询

如何通过一次调用将一组对象推送到猫鼬中的数组中?

如何通过一次调用将一组对象推送到猫鼬中的数组中?

猫鼬查询以检查所搜索元素的数组中的特定值

如何在猫鼬中查询多个集合