我有以下文件:
{
_id: 123,
state: "AZ",
products: [
{
product_id: 1,
desc: "P1"
},
{
product_id: 2,
desc: "P2"
}
]
}
我需要编写一个查询以从产品数组中返回单个元素,其中状态为“AZ”且product_id 为2。如果未找到匹配的product_id,则返回产品数组中的第一个(或任何)元素。
例如:如果 Product_id 为 2(找到匹配项),则结果应为:
products: [
{
product_id: 2,
desc: "P2"
}
]
如果product_id为3(未找到),则结果应为:
products: [
{
product_id: 1,
desc: "P1"
}
]
当找到匹配项时,我能够满足一个条件,但不确定如何满足同一查询中的第二个条件:
db.getCollection('test').find({"state": "AZ"}, {_id: 0, state: 0, products: { "$elemMatch": {"product_id": "2"}}})
我也尝试使用聚合管道,但找不到有效的解决方案。
注意:这与以下问题不同,因为如果找不到匹配项,我需要返回默认元素:仅检索 MongoDB 集合中对象数组中的查询元素 https://stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in-an-object-array-in-mongodb-collection