带有匹配的MongoDB聚合显示所有记录
Posted
技术标签:
【中文标题】带有匹配的MongoDB聚合显示所有记录【英文标题】:MongoDB Aggregation with match shows all the records 【发布时间】:2020-09-25 17:28:46 【问题描述】:我有如下的 json 对象。
"_id" : ObjectId("123209sfekjern"),
"Name" : "Test1",
"Orders" : [
"Date" : "2020-05-05",
"Total" : "100.00"
,
"Date" : "2020-05-10",
"Total" : "110.00"
,
"Date" : "2020-05-11",
"Total" : "100.00"
,
"Date" : "2020-05-14",
"Total" : "110.00"
,
"Date" : "2020-05-20",
"Total" : "100.00"
,
"Date" : "2020-05-15",
"Total" : "100.00"
,
"Date" : "2020-05-12",
"Total" : "110.00"
,
"Date" : "2020-05-18",
"Total" : "100.00"
,
"Date" : "2020-05-31",
"Total" : "110.00"
]
我需要所有大于 100.00 的订单的 customername、orders.Date 和 Order.Total
我尝试了以下查询..
db.Customers.aggregate
(
[
$match:
$and: [
"Orders.Date":$gte:"2020-05-15",//ISODate('2020-05-15 10:00:00.000Z')
"Orders.Total": $gte: "100.00" ,
]
,
$project: _id:0, Name: 1, "Orders.Total": 1, "Orders.Date": 1 ,
]
)
以上查询返回所有记录。我仍然是初学者和学习 mongodb。 任何帮助将不胜感激。
谢谢。
【问题讨论】:
【参考方案1】:$match
在文档级别过滤,因此如果至少有一个子文档符合您的条件,则将返回整个文档。为了过滤嵌套数组,您需要$filter:
db.Customers.aggregate([
$project:
_id: 0,
Name: 1,
Orders:
$filter:
input: "$Orders",
cond:
$and: [
$gte: [ "$$this.Date", "2020-05-15" ] ,
$gte: [ "$$this.Total", "100.00" ] ,
]
])
Mongo Playground
【讨论】:
以上是关于带有匹配的MongoDB聚合显示所有记录的主要内容,如果未能解决你的问题,请参考以下文章
管道阶段规范对象必须包含一个带有 php mongo 聚合的字段
管道阶段规范对象必须包含一个带有 php mongo 聚合的字段