从不调用Mongodb插入callback

这个问题是这个问题的一个后续问题,我想问一个新的问题比发表评论和necropost更好。

(TL; DR,当插入一个集合时,他们给出一个解决scheme来获得_id)

我已经尝试了一个.js bash脚本或在控制台中似乎不工作:

var latest; db.collec.insert({test:"yes"},function(err,newDoc){ latest = newDoc[0]._id; }); 

该variables不会改变。 在控制台中,命令返回WriteResult({ "nInserted" : 1 })但是最新的仍然是空的,在js中它具有和以前相同的值。

有没有办法得到没有Node.js的id? 我应该切换到Node.js?


我的bash脚本真的只是mongo --eval '<my whole javascript>'

你在expression中缺less一件。

 var latest; db.collec.insert({test:"yes"},function(err,newDoc){ latest = newDoc.ops[0]._id; }); 

newDoc包含了mongo的整个响应。

newDoc.ops包含插入行的数组。

newDoc.insertedIds包含插入行的ID的数组。

另一种解决scheme是:

 var latest; db.collec.insert({test:"yes"},function(err,newDoc){ latest = newDoc.insertedIds[0]; }); 

您可以在不使用Node.js的情况下获取数据。 你可以使用Mongodb shell。 从运行Mongotypesmongo的系统上的命令提示符到达交互式shell。 到那里,运行Mongo命令:

 > show dbs //will list all databases > use dbName //will use database called dbName > show collections //will list all collections within the current database > db.col.find({test: 'yes'}); //will retrieve document from collection named col where 'test' = 'yes' 

整个工作的JavaScript文件:

 var mongodb = require('mongodb').MongoClient; mongodb.connect('mongodb://localhost:27017/testDb', function(err, db){ var collection = db.collection('collec'); collection.insert({'test': 'yes'}, function(err, results){ console.log(results.ops[0]._id); db.close(); }); }); 

这可以直接用_id查询。

 var mongodb = require('mongodb').MongoClient; var ObjectId = require('mongodb').ObjectID; mongodb.connect('mongodb://localhost:27017/testDb', function(err, db){ var collection = db.collection('collec'); var id = ObjectId('583346693b3b904546ca175d'); collection.find({'_id': id}).toArray(function(err, results){ console.log(results); db.close(); }); });