【问题标题】:How to query mongodb documents with one same fields如何查询具有相同字段的mongodb文档
【发布时间】:2018-03-21 03:44:44
【问题描述】:

我有多个 mongodb 文档,其中包含一些不同的字段,但使用一个相同的字段名称作为标识符。如何使用一个相同的字段查询不同的文档?例如,以下文档都有一个“名称”字段,但没有其他共同字段。

{ "_id" : 1, "name" : "dave123", "gender" : "male"}
{ "_id" : 2, "name" : "dave123", "age" : 23}
{ "_id" : 3, "name" : "an567",  "gender" : "male"}
{ "_id" : 4, "name" : "an567", "age" : 21}

如果我想查询所有 23 岁的男性,我会怎么做?以下代码不返回任何内容,因为没有包含这两个字段的文档。相反,有两个单独的文档,每个文档都有一个匹配字段。

df.collections.find({$and: [{"gender" : "male"}, {"age" : 23}]})

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    在聚合查询中首先使用$group 准备数据,然后使用$match

    类似

    db.collections.aggregate([
      {"$group":{
        "_id":"$name",
        "gender":{"$push":"$gender"},
        "age":{"$push":"$age"}
      }},
      {"$match":{"gender":"male","age":23}}
    ])
    

    【讨论】:

    • 当我尝试这个时,我在性别和年龄字段中得到空值。
    【解决方案2】:

    如果文档中没有genderage,您的查询将无法获得任何结果

    【讨论】:

    • 所以没有办法像我想的那样查询?
    • 我认为你必须重新考虑你的架构。正如我在您的示例中看到的,您有一个带有性别字段的文档,另一个带有年龄字段的文档,但名称相同。为什么不将值存储在同一个文档中?
    • 这只是一个例子。我正在处理大量数据,并希望它更有条理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2017-01-27
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多