Mongo shell脚本输出与Mongo-shell输出的差异

时间:2015-10-09 08:34:59

标签: bash mongodb shell

即使在匹配的情况下传递ObjectId时我也没有得到输出,当我从mongo shell运行相同的命令时它工作..可能是什么问题?

mongo myDB --eval 'db.myUserDocColl.find({"_id" : ObjectId("55fd20104ead737a83540a91")},{name:1,email:1,mobileNumber:1,"_id":0});'

输出

MongoDB shell version: 3.0.2
connecting to: myDB
DBQuery: myDB.myUserDocColl -> { "_id" : ObjectId("55fd20104ead737a83540a91") }

1 个答案:

答案 0 :(得分:1)

shell的interactive and scripted mode之间存在差异。

当您在shell中运行JavaScript时,find()查询返回的光标为automatically iterated

  

db.collection.find()方法返回一个游标。要访问文档,您需要迭代光标。但是,在mongo shell中,如果使用var关键字未将返回的游标分配给变量,则游标最多会自动迭代20次以打印到结果中的前20个文档。

如果您在脚本模式下运行相同的JavaScript(即通过--eval等命令行选项传递),则需要显式迭代光标并使用print()printjson()打印结果:

mongo myDB --quiet --eval 'printjson(db.myUserDocColl.find({"_id" : ObjectId("55fd20104ead737a83540a91")},{name:1,email:1,mobileNumber:1,"_id":0}).toArray())'

我还在此示例命令行中添加了--quiet选项,这会删除脚本通常不需要的额外输出(例如,shell版本标题和"连接到。 .."消息)。