Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何从搜索结果中排除查询中不存在字段的文档?_Mongodb - Fatal编程技术网

Mongodb 如何从搜索结果中排除查询中不存在字段的文档?

Mongodb 如何从搜索结果中排除查询中不存在字段的文档?,mongodb,Mongodb,我有两份文件: {p1:“a”,p2:“b”} {p1:“a”,p2:“b”,p3:“c”} 我应该如何处理查询:{p1:“a”,p2:“b”}以仅查找第一个文档?因此,我只想找到具有我指定的字段的文档。如果文档包含的字段多于查询字段,则不应将其显示在搜索结果中。我必须承认,我不知道有任何常规的查询方法可以解决此问题。我只知道一种方法,那就是使用MongoDB对象比较。要做到这一点,您需要改变您的结构,使其符合以下原则: { ps: [a,b] } 或: 然后你会想: db.col.f

我有两份文件:

  • {p1:“a”,p2:“b”}
  • {p1:“a”,p2:“b”,p3:“c”}

  • 我应该如何处理查询:{p1:“a”,p2:“b”}以仅查找第一个文档?因此,我只想找到具有我指定的字段的文档。如果文档包含的字段多于查询字段,则不应将其显示在搜索结果中。

    我必须承认,我不知道有任何常规的查询方法可以解决此问题。我只知道一种方法,那就是使用MongoDB对象比较。要做到这一点,您需要改变您的结构,使其符合以下原则:

    {
        ps: [a,b]
    }
    
    或:

    然后你会想:

    db.col.find({ p: [a,b] })
    
    或:

    不过,这有一个直接的问题。这取决于关键顺序,这意味着如果您的
    a
    b
    在另一个文档中实际上是相反的,那么它将不匹配。所以,如果您这样做,您需要确保在保存时关心订单


    希望能有所帮助,

    我必须承认,我不知道有什么正常的查询方法可以解决这个问题。我只知道一种方法,那就是使用MongoDB对象比较。要做到这一点,您需要改变您的结构,使其符合以下原则:

    {
        ps: [a,b]
    }
    
    或:

    然后你会想:

    db.col.find({ p: [a,b] })
    
    或:

    不过,这有一个直接的问题。这取决于关键顺序,这意味着如果您的
    a
    b
    在另一个文档中实际上是相反的,那么它将不匹配。所以,如果您这样做,您需要确保在保存时关心订单


    希望它能有所帮助,

    使用这种结构并不容易,您需要一些其他可转位的提示,以了解取什么和取什么

    如果您知道不需要哪些字段,可以使用$exists,但效率不高

    db.col.find({p3:{$exists:false}})
    
    你也可以这样做

    db.col.find({ p1:"a", p2:"b", p3:null }
    
    你能扔掉你自己代码中不需要的字段吗?或者你可以重组成嵌套的组,使其更容易过滤

    { basicData:{p1:"a", p2:"b"}, extraData:{p3:"c",p4:"d"} }
    

    使用这种结构并不容易,你需要一些其他可转位的线索来决定该拿什么和该走什么

    如果您知道不需要哪些字段,可以使用$exists,但效率不高

    db.col.find({p3:{$exists:false}})
    
    你也可以这样做

    db.col.find({ p1:"a", p2:"b", p3:null }
    
    你能扔掉你自己代码中不需要的字段吗?或者你可以重组成嵌套的组,使其更容易过滤

    { basicData:{p1:"a", p2:"b"}, extraData:{p3:"c",p4:"d"} }
    

    回答得好!这个关键的顺序太糟糕了回答很好!键顺序+1很糟糕这是一个字段数量有限的标准。添加一个服务器端查询生成器将是很容易做到的。它是有效的。非常感谢。(我试过db.col.find({p1:a),p2:b,p3:null}))+1这是具有有限个字段的标准。添加一个服务器端查询生成器将是很容易做到的。它是有效的。非常感谢。(我尝试了db.col.find({p1:a),p2:b,p3:null}))