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

具有灵活字段的MongoDB。如何查找具有特定字段名的所有记录?,mongodb,Mongodb,我有个计划 { "_id" : ObjectId("50ec1d93ba02ece1979ee4a5"), "url" : "google.com" "results" : [ { "1357651347" : { "data1" : "a", "data2" : "b", "data3" : "c" }}, { "1357651706" : { "data1" : "d", "data2" : "e", "data3" : "f" }},

我有个计划

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

您可以检查是否存在某些内容,或者检查是否有空的内容

因此对于
$exists
():

用于检查某个内容是否不是空的:

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

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

您可以检查是否存在某些内容,或者检查是否有空的内容

因此对于
$exists
():

用于检查某个内容是否不是空的:

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

注意:通常最好使用
null
查询另一种方式来检查某个内容是否为
null
,然后在应用程序中执行判断过程。这样,你也可以在查询中使用稀疏索引,使其更简洁。Sammaye的回答

1,但是考虑修改你的模式,去掉动态字段名称,这样会使查询变得尴尬。

而是像这样:

{
“_id”:ObjectId(“50ec1d93ba02ece1979ee4a5”),
“url”:“google.com”
“结果”:[
{id:1357651347,“数据1”:“a”,“数据2”:“b”,“数据3”:“c”},
{id:1357651706,“数据1”:“d”,“数据2”:“e”,“数据3”:“f”},
{id:1357651772,“数据1”:“g”,“数据2”:“h”,“数据3”:“i”}
]
}
然后,您可以查询包含您要查找的结果的文档,如下所示:

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

对于Sammaye的回答,>P>+ 1,但是考虑重新设计你的模式,去掉动态字段名称,这样会使查询变得尴尬。 而是像这样:

{
“_id”:ObjectId(“50ec1d93ba02ece1979ee4a5”),
“url”:“google.com”
“结果”:[
{id:1357651347,“数据1”:“a”,“数据2”:“b”,“数据3”:“c”},
{id:1357651706,“数据1”:“d”,“数据2”:“e”,“数据3”:“f”},
{id:1357651772,“数据1”:“g”,“数据2”:“h”,“数据3”:“i”}
]
}
然后,您可以查询包含您要查找的结果的文档,如下所示:

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

使用$exists():
db.col.find({“results.1357651706:{$exists:true}})
或检查它是否为
null
(或否)检查。请发布您的答案和答案,我将奖励您。使用$exists():
db.col.find({“results.1357651706:{$exists:true}})
或检查它是否为
null
(或否)检查。请发布你的答案,我会奖励你的。