【发布时间】:2018-10-03 15:11:30
【问题描述】:
我有以下文件:
{
_id: 123,
state: "AZ",
products: [
{
product_id: 1,
desc: "P1"
},
{
product_id: 2,
desc: "P2"
}
]
}
我需要编写一个查询以从 products 数组中返回一个元素,其中 state 为“AZ”,product_id 为 2。如果找不到匹配的 product_id,则返回 products 数组中的第一个(或任何)元素.
例如:如果 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"}}})
我也尝试使用聚合管道,但找不到可行的解决方案。
注意:这与以下问题不同,因为如果未找到匹配项,我需要返回默认元素: Retrieve only the queried element in an object array in MongoDB collection
【问题讨论】:
-
@AnthonyWinzlet,我需要返回一个默认元素以防找不到匹配项。在您提到的重复问题中没有提出这个问题。
标签: mongodb aggregation-framework