Mongodb查找PHP中给定集合中子字段的所有记录

时间:2014-11-23 08:53:26

标签: php mongodb

我有一个看起来像这样的文档 { "field1":"value1", "field2":{"unknown_key1":"value2", "unknown_key2":"value3", ... "unknown_keyN":"valueN"} }

和一个数组(“arr1”,“arr2”,“arr3”)

我想查询查找所有未知密钥都在我的数组定义的集合中的文档,除了这些密钥的数量N和它们的值是未知的。在Mongodb中这是可能的吗?如果可以的话,我该如何去做呢。

3 个答案:

答案 0 :(得分:1)

根据您的问题,我认为您的数组中存在一些unknown_key,如果您的数组包含以下值,

var values = ("arr1","arr2","arr3",..."unknown_key1","unknown_key2",.."arrN")

如果是,那么你应该使用以下查询来找出

for( i = 0; i < values.length ; i++ ) {
db.collectionName.find({},{"field2."+values[i]:1})
 } 

答案 1 :(得分:0)

我对PHP并不熟悉,但是你通常在其他语言中使用的是使用对象数组,然后使用它。

E.g:

"field1":"value1",
"field2":[
    {"unknown_key1":"value2"},
    {"unknown_key2":"value3"}
     ...
    {"unknown_keyN":"valueN"}
    ]

然后你可以通过

找到它们
...find({"field2.unknown_key1": "value2", ... })

请参阅此处的另一个示例Mongo Query on Subfields

答案 2 :(得分:0)

在这种情况下,您可以使用$where。如果任何未知键应该在数组定义的集合中:

db.collection_name.find({$where: function() {
  var myarr = ["unknown_key", "arr1", "arr2", "arr3"];
  for(var key in this.field2) {
    var subkey = key.substr(0, key.length-1); //get unknown_key from unknown_keyN
    var id = myarr.indexOf(subkey); // check if in array 
    if (id != -1) return true;
  }
  return false;
}})

如果所有未知键都在数组定义的集合中:

db.collection_name.find({$where: function() {
  var myarr = ["unknown_key", "arr1", "arr2", "arr3"];
  if (this.field2  != undefined) {
    for(var key in this.field2) {
      var subkey = key.substr(0, key.length-1); //get unknown_key from unknown_keyN
      var id = myarr.indexOf(subkey); // check if in array 
      if (id == -1) return false;
    } 
    return true;
  } else {
    return false;
  }
}})