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”}以仅查找第一个文档?因此,我只想找到具有我指定的字段的文档。如果文档包含的字段多于查询字段,则不应将其显示在搜索结果中。我必须承认,我不知道有任何常规的查询方法可以解决此问题。我只知道一种方法,那就是使用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}))