只需从单个文档中获取单个属性

时间:2015-07-28 00:15:32

标签: mongodb shell mongodb-query

我需要从mongo db上的集合中提取最新日期并将其设置为shell脚本。

LASTDOCDATE=mongo mongo.com:27017/tracking -u user -p pw   --authenticationDatabase authdb  --eval 'db.TRACKING_DATA.find({},{datecreated :1}).limit(1).sort({datecreated:-1}).map(function (doc){ return doc.datecreated; })'

echo $LASTDOCDATE

这是设置但是当通过终端运行时产生:

connecting to: mongo.com:27017/tracking
Mon Jul 27 2015 16:28:08 GMT-0700 (PDT)

我可以将只在shell脚本中设置的日期属性作为变量

1 个答案:

答案 0 :(得分:1)

使用shell的printjson()方法包裹你的电话,以获得输出字符串:

LASTDOCDATE=mongo mongo.com:27017/tracking -u user -p pw  \\
--authenticationDatabase authdb \\
--eval 'printjson(db.TRACKING_DATA.find({},{datecreated :1}).limit(1).sort({datecreated:-1}).map(function (doc){ return doc.datecreated; }))'

或者只是打印,同时引用单个元素:

LASTDOCDATE=mongo mongo.com:27017/tracking -u user -p pw  \\
--authenticationDatabase authdb \\
--eval 'print(db.TRACKING_DATA.find({},{datecreated :1}).limit(1).sort({datecreated:-1}).toArray()[0].datecreated'

记下单个数组元素,然后是属性:

.find({},{datecreated :1}).limit(1).sort({datecreated:-1}).toArray()[0].datecreated'

或使用$orderby这样的findOne():

.findOne(
    { "query": {}, "$orderby": { "datecreated": 1 }},
    { "_id": 0, "datecreated": 1 }
).datecreated

所以.print().printjson()取决于您想要的输出格式。或者甚至在“datecreated”上.valueOf()来获取时间戳值而不是字符串。