0

我有一个方案

{ 
   "_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 中)?

4

2 回答 2

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,然后在您的应用程序中进行判断过程。这样,您也可以在查询中使用稀疏索引以使其更精简。

于 2013-01-08T14:17:26.617 回答
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})
于 2013-01-08T14:25:37.103 回答