从未调用Mongodb插入回调

时间:2016-11-17 17:03:13

标签: javascript node.js mongodb

这个问题是this one的后续问题,我认为提出一个新问题比发表评论和necropost更好。

(TL; DR他们提供了一个解决方案,以便在插入集合时获取_id)

我尝试使用.js bash脚本或在控制台中尝试似乎无法做到:

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

变量不会改变。在控制台中,命令返回WriteResult({ "nInserted" : 1 })但最新仍然无效,并且在js中它具有与之前相同的值。

有没有办法在没有Node.js的情况下获取id?我应该切换到Node.js吗?

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

1 个答案:

答案 0 :(得分:1)

你的表达中缺少一个部分。

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

newDoc包含来自mongo的完整回复。

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

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

另一种解决方案是:

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

您可以在不使用Node.js的情况下获取数据。您可以使用Mongodb shell。从运行Mongo类型mongo的系统上的命令提示符转到交互式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();
   });
});