具有灵活字段的MongoDB。如何查找具有特定字段名称的所有记录?

时间:2013-01-08 13:43:27

标签: mongodb

我有一个计划

{ 
   "_id" : ObjectId("50ec1d93ba02ece1979ee4a5"), 
   "url" : "google.com" 
   "results" : [ 
      { "1357651347" : { "data1" : "a", "data2" : "b", "data3" : "c" }},
      { "1357651706" : { "data1" : "d", "data2" : "e", "data3" : "f" }},
      { "1357651772" : { "data1" : "g", "data2" : "h", "data3" : "i" }} 
    ]
}

我对ID为1357651706的结果感兴趣。我如何获得它们(用PHP)?

2 个答案:

答案 0 :(得分:4)

您可以检查是否存在某些内容,或者您​​可以检查某些内容是否为空(

因此对于$existshttp://docs.mongodb.org/manual/reference/operator/exists/):

db.col.find({"results.1357651706": {$exists:true}})

并检查某些内容是否不是null

db.col.find({ "results.1357651706": {$ne: null} })

注意:通常最好使用null查询来检查某些内容是否为null,然后在您的应用中执行判断过程。这样,您也可以在查询中使用稀疏索引,使其更精简。

答案 1 :(得分:1)

+1给Sammaye的答案,但考虑重新设计你的架构以摆脱动态字段名称,使这样的查询变得尴尬。

取而代之的是:

 
{ 
   "_id" : ObjectId("50ec1d93ba02ece1979ee4a5"), 
   "url" : "google.com" 
   "results" : [ 
      { id: 1357651347, "data1" : "a", "data2" : "b", "data3" : "c" },
      { id: 1357651706, "data1" : "d", "data2" : "e", "data3" : "f" },
      { id: 1357651772, "data1" : "g", "data2" : "h", "data3" : "i" } 
    ]
}

然后您可以查询包含您正在寻找的结果的文档:

 
db.col.find({'results.id': 1357651706})