我有产品系列。每个产品都包含一系列历史记录项。
{
"_id" : "product1"
"name" : "Product 1",
"history" : [
{
"date" : "2017-09-18 11:49:03.000",
"processed" : 0,
"status": "New"
},
{
"date" : "2017-09-18 11:49:03.000",
"processed" : 0,
"diff": []
}
]
}
{
"_id" : "product2"
"name" : "Product 2",
"history" : [
{
"date" : "2017-09-18 11:49:03.000",
"processed" : 1,
"status": "New"
},
{
"date" : "2017-09-18 11:49:03.000",
"processed" : 0,
"diff": []
}
]
}
我可以通过使用以下mongoDB查询找到所有新产品并且具有尚未处理的历史记录:
db.products.find(
{
"history": {
$elemMatch: {
"processed": {$eq: 0},
"status": {$eq: "New"}
}
}
}
)
但我无法弄清楚如何找到那些:
"processed": {$eq: 0}
所以它应该带回“product2”而不是“product1”,因为product1需要以不同的方式处理。
非常感谢任何帮助: - )
答案 0 :(得分:0)
您的输出中只有product 1
,因为您正在and
搜索仅匹配processed
的{{1}}和status
字段。如果您希望product 1
仅基于product 2
字段,则需要使用processed
查询。
检查以下查询,它将同时返回$or
和product 1
product 2
根据您在评论中的说明更新了查询。
{
"history": {
$elemMatch: {
$or:[
{"processed": {$eq: 0}},
{"status": {$eq: "New"}}]
}
}
}