带有匹配的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 聚合的字段

MongoDB 4.1 TotalRecords 和聚合中的数据

性能聚合 MongoDB 匹配和示例

mongoDB应用篇-mongo聚合查询

MongoDB/py-mongo 用于带有日期函数的查询