29

私はMongoで単純なクエリを試していますが、MySQLでは次のようになります。

select * from emails where bounceCount > sentCount;

これまでのところ、私は持っています。

db.email.find({ bounceCount : { $gt : sentCount } } );

しかし、私はこのエラーが発生します

JS Error: ReferenceError: sentCount is not defined (shell):0

そのシェルで sentCount を参照するにはどうすればよいですか?

4

4 に答える 4

36

それはトリックを行う必要があります:

db.emails.find({ $expr: { $gt: [ "$bounceCount" , "$sentCount" ] } });

ここに私が見つけた参照があります: https://docs.mongodb.com/manual/reference/operator/query/expr/#op._S_expr

于 2018-04-02T19:05:59.453 に答える
18

db.so.find("this.bounceCount > this.sentCount")あなたが探しているものです。

同等:db.so.find({"$where":"this.bounceCount > this.sentCount"})

ドキュメント: http://docs.mongodb.org/manual/reference/operator/where/

シェル出力:

> db.so.insert({bounceCount:1, sentCount:2})
> db.so.insert({bounceCount:5, sentCount:3})
> db.so.insert({bounceCount:5, sentCount:4})
> db.so.insert({bounceCount:5, sentCount:7})
> db.so.insert({bounceCount:9, sentCount:7})

> db.so.find()
{ "_id" : ObjectId("516d7f30675a2a8d659d7594"), "bounceCount" : 1, "sentCount" : 2 }
{ "_id" : ObjectId("516d7f37675a2a8d659d7595"), "bounceCount" : 5, "sentCount" : 3 }
{ "_id" : ObjectId("516d7f3b675a2a8d659d7596"), "bounceCount" : 5, "sentCount" : 4 }
{ "_id" : ObjectId("516d7f3d675a2a8d659d7597"), "bounceCount" : 5, "sentCount" : 7 }
{ "_id" : ObjectId("516d7f40675a2a8d659d7598"), "bounceCount" : 9, "sentCount" : 7 }

> db.so.find({"bounceCount":5})
{ "_id" : ObjectId("516d7f37675a2a8d659d7595"), "bounceCount" : 5, "sentCount" : 3 }
{ "_id" : ObjectId("516d7f3b675a2a8d659d7596"), "bounceCount" : 5, "sentCount" : 4 }
{ "_id" : ObjectId("516d7f3d675a2a8d659d7597"), "bounceCount" : 5, "sentCount" : 7 }

> db.so.find("this.bounceCount > this.sentCount")
{ "_id" : ObjectId("516d7f37675a2a8d659d7595"), "bounceCount" : 5, "sentCount" : 3 }
{ "_id" : ObjectId("516d7f3b675a2a8d659d7596"), "bounceCount" : 5, "sentCount" : 4 }
{ "_id" : ObjectId("516d7f40675a2a8d659d7598"), "bounceCount" : 9, "sentCount" : 7 }
于 2013-04-16T16:45:31.937 に答える
1

$where 演算子を使用してこれを行うことができます。これにより、クエリで Javascript コードを使用できます。

あなたの例では、次のようにします。

db.email.find({ $where: "this.bounceCount > this.sentCount" });

$where 演算子の詳細については、MongoDB のドキュメント ページを参照してください: http://docs.mongodb.org/manual/reference/operator/where/#op._S_where

于 2013-04-16T16:46:18.083 に答える