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

时间:2012-10-29 07:16:38

标签: mongodb

我有两份文件:

  1. {p1:“a”,p2:“b”}
  2. {p1:“a”,p2:“b”,p3:“c”}
  3. 我应该如何处理查询:{p1:“a”,p2:“b”}只找到第一个文件?所以我想找到只有我指定的字段的文档。如果文档包含更多字段(而不是查询),则不应在搜索结果中显示该字段。

2 个答案:

答案 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} })

虽然有一个直接的问题。它取决于关键顺序,这意味着,如果您的ab实际上是另一种文档中的另一种方式则不匹配。因此,如果您这样做,您需要确保在保存时关注订单。

希望它有所帮助,

答案 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"} }