Mongodb插入回调从未调用

Mongodb insert callback never called

本文关键字:调用 回调 插入 Mongodb      更新时间:2023-09-26

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

(TL;DR他们给出了一个解决方案,当一个集合被插入时获取_id)

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

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

变量不变。在控制台,命令返回WriteResult({ "nInserted" : 1 }),但lastest仍然是空的,在js中,它的值与之前相同。

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


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

你的表达式缺少了一部分。

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();
   });
});