1

我有两个文件:

  1. { p1:"a", p2:"b" }
  2. { p1:"a", p2:"b", p3:"c" }

我应该如何处理查询:{ p1:"a", p2:"b" } 只查找第一个文档?所以我只想找到我指定的字段的文档。如果文档具有更多字段(比查询),则不应在搜索结果中显示。

4

2 回答 2

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实际上在另一个文档中是相反的,它将不匹配。因此,如果您这样做,您需要确保在保存时关心订单。

希望能帮助到你,

于 2012-10-29T08:26:10.777 回答
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"} }
于 2012-10-29T10:12:47.870 回答