代码之家  ›  专栏  ›  技术社区  ›  Ryan

mongodb find()返回整个db,即使使用参数

  •  1
  • Ryan  · 技术社区  · 5 年前

    我有以下数据库:

    {
        "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 回复  |  直到 5 年前
        1
  •  2
  •   JPm    5 年前

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

    这是一份文件

    [{
        "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" 会告诉你有多少文件。

    编辑:要添加到其中,在集合“test”中,文档有1个字段,即“a”,属于保存对象(文档)的类型数组。它有两个数组元素

    弗斯特

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

    第二

    {
            "name": "abc",
            "thing": [{
                "name": "123",
                "list": ["one", "two"]
            }]
    }
    
        2
  •  1
  •   user2341923    5 年前

    花括号内的所有内容 {..} 包括大括号本身在内,是一个单独的文档,也就是说,整个数据库只包含一个用于任何匹配查询的文档。要获得所需的结果,必须将JSON文档重新编写为方括号内的文档数组。 [..] .