从不调用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(); }); });