【问题标题】:How to Merge the results of a $match and $geoNear in one pipeline in Mongodb如何在 Mongodb 的一个管道中合并 $match 和 $geoNear 的结果
【发布时间】:2020-12-07 15:31:32
【问题描述】:

我有一些餐馆,我想用两个不同的条件查询它们并将它们合并在一起

我有两个聚合管道,一个是 $match,另一个是 $geoNear,

 array:1 [▼
  0 => array:1 [▼
    "$match" => array:1 [▼
      "$or" => array:1 [▼
        0 => array:1 [▼
          "$and" => array:2 [▼
            0 => array:1 [▼
              "country" => array:1 [▶]
            ]
            1 => array:1 [▼
              "$or" => array:1 [▼
                0 => array:1 [▼
                  "$or" => array:1 [▶]
                ]
              ]
            ]
          ]
        ]
      ]
    ]

^ array:1 [▼
  0 => array:1 [▼
    "$geoNear" => array:5 [▼
      "near" => array:2 [▶]
      "distanceField" => "distance.calculated"
      "spherical" => true
      "key" => "location"
      "query" => array:1 [▶]
    ]
  ]
]

我希望能够在一个管道中只打一个电话/获得所有非重复餐厅。 (一种识别它们的方法是使用 _id )

例如获取所有匹配 $match pipeline 的,与 $geoNear 相同,合并它们并删除重复项

【问题讨论】:

    标签: php database mongodb mongoose


    【解决方案1】:

    您可以在$geoNear 中使用query 选项。它将包含与查询条件匹配的文档。

    Reference

    文档示例:

    db.places.aggregate([
       {
         $geoNear: {
            near: { type: "Point", coordinates: [ -73.99279 , 40.719296 ] },
            distanceField: "dist.calculated",
            maxDistance: 2,
            query: { category: "Parks" }, //Query portion
            includeLocs: "dist.location",
            spherical: true
         }
       }
    ])
    

    【讨论】:

    • 你可以看到 geoNear 已经有一个查询,问题是条件不同,例如当做 geoNear 时键状态是打开的,当我在做 $match 键时状态已关闭
    • 好的,我们可以谈谈示例文件和预期的回复吗?感觉有什么误会
    • { 'state': 'open' // 关闭,N/A 'name': 'burger king', 'location': { "type" : "Point", "coordinates" : { 18.251985, 57.60289589999999 } } } 我要简化它(真正的查询更复杂)我想让所有开放的餐厅检查位置($geoNear),然后是所有关闭或 N/A 的餐厅使用 ($match)
    • 那么每个餐厅是否有多个条目?
    猜你喜欢
    • 2017-06-29
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    相关资源
    最近更新 更多