Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有自身属性比较的mongodb查询_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

具有自身属性比较的mongodb查询

具有自身属性比较的mongodb查询,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有这样的文件 { "_id": ObjectId("524a498ee4b018b89437f88a"), "counter": { "0": { "date": "2013.9", "counter": NumberInt(1425) }, "1": { "date": "2013.10", "counter": NumberInt(1425) } }, "profile"

我有这样的文件

{
   "_id": ObjectId("524a498ee4b018b89437f88a"),
   "counter": {
     "0": {
       "date": "2013.9",
       "counter": NumberInt(1425) 
    },
     "1": {
       "date": "2013.10",
       "counter": NumberInt(1425) 
    } 
  },
   "profile": ObjectId("510576242b5e30877c654aff") 
}
我想搜索那些,其中counter.0.counter不等于counter.1.counter

尝试

但它表示这不是一个有效的json查询:/ 帮忙

两件事

除非求助于JavaScript或使用聚合框架,否则实际上无法进行这样的比较。使用聚合的表单是更好的选择:

db.collection.aggregate([
{“$project”:{
"柜台":一,,
“匹配”:{“$eq”:[
“$counter.0.counter”,
“$counter.1.计数器”
]}
}},
{“$match”:{“matched”:true}
])
或者,如果JavaScript使用不当:

db.collection.find({
“$where”:函数(){
返回this.counter.0.counter==this.counter.1.counter;
}
})
因此,这些就是可以做到这一点的方法

JavaScript
$where
操作符的主要问题是:

  • 调用JavaScript解释器来计算每个结果文档,而不是本机代码

  • 根据需要删除使用索引查找结果的任何机会。通过其他方法,您实际上可以使用带有单独“匹配”条件的索引。但这个操作员排除了这个机会


所以我真的希望您的数据看起来不是这样的,它实际上是某种PHP转储。因为这不是表示这种结构的好方法,我希望“计数器”(顶层)实际上是一个真正的数组。好吧,这就是它在数据库中的存储方式,计数器不是一个真正的数组,它是一个真正的哈希映射。哈希映射不是这种结构的理想形式,但它实际上不会改变近似。使用数组可能会更好。如果您确实阅读了响应,则不应该尝试第二种方法。也不是你的问题那你为什么在这里?
db.counter.find({"profile":ObjectId("510576242b5e30877c654aff"),"counter.0.counter":{$ne:"counter.1.counter"}  });