【问题标题】:MongoDB Flatten Embedded Document from find() OperationMongoDB Flatten Embedded Document from find() 操作
【发布时间】:2020-07-31 04:59:45
【问题描述】:

我看过几篇关于这个的帖子,但似乎没有一个能达到我想要的效果。我有一个集合,我查询和接收在根级文档中有数据的文档,然后是嵌入文档中的数据;我想从根级别和嵌入式中选择性地访问和返回几个字段,但我希望它们都在根级别文档中。我正在使用 mongoengine 和 pymongo。

例如看下面的代码:

return self.test_collection.find({'Date': {'$gte': start_date}, 'Date': {'$lte': end_date},
                                                    'customer': {'$in': customers}},
                                                   {'Date': 1, 'Time': 1, 'ID': 1,
                                                    'customer': 1, 'style': 1, 'price': 1, 'qty': 1,
                                                    'product.code': 1, 'product.vendor': 1})

上面目前返回类似于{date, time, id, customer, style, price, qty, product {code, vendor}} 我正在寻找{date, time, id, customer, style, price, qty, code, vendor} 这是一个需要查询的大型集合,我真的不想从每个文档中提取我想要的值.有什么想法吗?

【问题讨论】:

    标签: python-3.x mongodb pymongo mongoengine


    【解决方案1】:

    将聚合管道与您的过滤器一起用作$match 表达式。在投影步骤中,您可以使用字典语法将表达式映射到字段。将此与您已经拥有的语法进行对比,其中每个字段都是字典中的键,值等于 1。

    示例代码(应该可以,但可能不行,因为我无权访问您的数据库,因此尚未测试)

    selection = {
        'Date': {'$gte': start_date, '$lte': end_date},
        'customer': {'$in': customers}
        }
    
    projection = {
        'Date': 1, 
        'Time': 1, 
        'ID': 1,
        'customer': 1, 
        'style': 1, 
        'price': 1, 
        'qty': 1,
        'product_code': '$product.code', 
        'product_vendor': '$product.vendor'
        }
    
    self.test_collection.aggregate([
        {'$match': selection},
        {'$project': projection}
    ])
    

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 2013-12-17
      相关资源
      最近更新 更多