db.getCollection(“rank”).find({“$where:”this.stats > this.stats”}).limit(1000).count(0)
有啥解决办法不
$where is not allowed in this context
经过测试,发现3.4版本使用$where可以进行count。如果是limit之后count,这个limit是忽略的
不管是3.4还是4.2版本中$where都是可以count。
shard1:PRIMARY> db.version();
3.4.23
shard1:PRIMARY> db.xiaoxu.find({$where:’this.A>this.B’}).limit(2).count(0)
7
shard1:PRIMARY> db.xiaoxu.count({$where:’this.A>this.B’})
7
shard1:PRIMARY>
shard1:PRIMARY> db.version();
4.2.14
shard1:PRIMARY> db.xiaoxu.find({$where:’this.A>this.B’}).limit(2).count(0)
8
shard1:PRIMARY> db.xiaoxu.count({$where:’this.A>this.B’})
8
shard1:PRIMARY> db.xiaoxu.count({$expr:{$gte:[‘$A’,’$B’]}})
8
shard1:PRIMARY>
如果是3.6版本,建议是$expr,$where执行js脚本,效率低。
尝试如下方式
db.getCollection(“rank”).find({$expr:{$gt:[‘$stats’,‘$stats1’]}}).count()
The query operator $where
can also be used to specify JavaScript expression. However:
- Starting in MongoDB 3.6, the
$expr
operator allows the use of aggregation expressions within the query language。
谢谢解决了,换成$expr了,还有发现不能执行的原因是Navicat Premium 15的问题
换成默认shell就可以
好的。我通常都是用shell来执行的
读取内容可以,但是count()不行