我有两份文件:
我应该如何处理查询:{p1:“a”,p2:“b”}只找到第一个文件?所以我想找到只有我指定的字段的文档。如果文档包含更多字段(而不是查询),则不应在搜索结果中显示该字段。
答案 0 :(得分:3)
我必须承认我知道没有正常的查询方法来解决这个问题。我只知道一种方法,那就是使用MongoDBs对象比较。要做到这一点,你可以改变你的结构:
{
ps: [a,b]
}
或:
{
ps: {p1:a,p2:b}
}
然后你会查询:
db.col.find({ p: [a,b] })
或:
db.col.find({ p: {p1:a, p2:b} })
虽然有一个直接的问题。它取决于关键顺序,这意味着,如果您的a
和b
实际上是另一种文档中的另一种方式则不匹配。因此,如果您这样做,您需要确保在保存时关注订单。
希望它有所帮助,
答案 1 :(得分:2)
使用该结构并不容易,您需要一些其他可索引的提示来确定要离开的内容。
如果您知道哪些字段不需要,可以使用$ exists,http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24exists,但效率不高。
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"} }