mongodb find()返回整个数据库,即使带有参数

时间:2019-02-07 16:46:35

标签: json mongodb

我有以下数据库:

{
    "a": [{
        "name": "foo",
        "thing": [{
            "name": "bar",
            "lyrics": ["1", "2", "3"]
        }]
    }, {
        "name": "abc",
        "thing": [{
            "name": "123",
            "list": ["one", "two"]
        }]
    }]
}

我似乎无法正确查询它。这两个查询返回相同的内容,即整个数据库:

  

db.test.find({“ a.name”:“ abc”})

     

db.test.find({“ a.name”:“ foo”})

如何找到一个集合而不是整个数据库?

我希望第一个查询返回:

{
  "name": "abc",
  "thing": [{
      "name": "123",
      "list": ["one", "two"]
  }]
}

2 个答案:

答案 0 :(得分:2)

这两个查询返回相同的文档,因为两个查询都匹配它。

这是一个文件

[{
    "a": [{
        "name": "foo",
        "thing": [{
            "name": "bar",
            "lyrics": ["1", "2", "3"]
        }]
    }, {
        "name": "abc",
        "thing": [{
            "name": "123",
            "list": ["one", "two"]
        }]
    }]
}]

这是两个文件

[{
    "a": [{
        "name": "foo",
        "thing": [{
            "name": "bar",
            "lyrics": ["1", "2", "3"]
        }]
    }]
},
{
    "a": [{
        "name": "abc",
        "thing": [{
            "name": "123",
            "list": ["one", "two"]
        }]
    }]
}]

您可以像这样获取集合的统计信息 db.test.stats() "count"会告诉您那里有多少文件。

编辑:为此,在集合“测试”中,文档具有1个字段,即“ a”,其类型为可容纳对象(文档)的数组。它有2个数组元素

第一

{
        "name": "foo",
        "thing": [{
            "name": "bar",
            "lyrics": ["1", "2", "3"]
        }]
}

第二

{
        "name": "abc",
        "thing": [{
            "name": "123",
            "list": ["one", "two"]
        }]
}

答案 1 :(得分:1)

花括号{..}中的所有内容,包括花括号本身,都是一个单独的文档,即整个数据库仅包含一个您为任何匹配查询收到的文档。为了获得理想的结果,您必须将您的JSON文档重新编写为方括号[..]中的文档数组。