4

クエリの例を次に示します。

db.readings.find( {"_id.s" : ISODate("2012-11-01T00:05:00Z") } ).count()

クエリは mongo シェルで動作します。ただし、bash スクリプトまたは直接 Ubuntu シェルで

mongo fivemin --eval "printjson(db.readings.find( {"_id.s" : ISODate("2012-11-01T00:05:00Z") } ).count())"

を返しますSyntaxError: missing : after property id (shell eval):1

クエリの問題が見つからないようです。に戻しましたが{ "_id" : {"s" : ...} }、それでも同じ問題が発生します。find().count()ただし動作​​します。

4

5 に答える 5

5

bash シェルでも同じ問題が発生しました。

これは二重引用符のために失敗します:

mongo fivemin --eval "printjson(db.readings.find( {"_id.s" : ISODate("2012-11-01T00:05:00Z") } ).count())"

しかし、一重引用符で eval 文字列を使用すると機能します。

mongo fivemin --eval 'printjson(db.readings.find( {"_id.s" : ISODate("2012-11-01T00:05:00Z") } ).count())'

$regex のような $ 記号を使用する場合は、エスケープする必要があります。

mongo fivemin --eval 'printjson(db.readings.find( {"_id.s" : {"\$regex":"2012-11-01T*"} } ).count())'
于 2017-02-07T20:22:23.987 に答える
0

演算子が で始まるため、クエリに などのmongo演算子が含まれている場合、bash の二重引用符--evalを使用すると別の問題が発生する可能性もあります。$ne$gt$

二重引用符:

$ echo " '$ne': null "
$ => '': null

一重引用符:

$ echo ' "$ne": null '
$ => "$ne": null

Bash は、こ​​れらの演算子を変数に置き換えようとします。

$ ne = 'test'
$ echo " '$ne': null "
$ => 'test': null

したがって、私は常に--eval一重引用符を使用することをお勧めします。

于 2013-12-20T15:26:08.307 に答える
0

ただ座って考えました。" で終了する bash に問題があるようです (すぐに気付くはずです!)。代わりに ' を使用しました (または、JSON には /" を使用できると思います)。クエリは次のようになります。

printjson(db.readings.find({'_id.s' : ISODate('2013-01-01T00:05:00Z') }).count())"

于 2013-03-15T15:16:06.380 に答える