Mongodb插入回调从未调用
Mongodb insert callback never called
这个问题是这个问题的后续问题,我认为问一个新问题比发表评论和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();
});
});
相关文章:
- 为什么(如何)'这'从函数内部调用回调时发生更改
- 在初始函数完成之前调用回调函数
- Node.js exec调用从不调用回调
- 如何从参数数组中调用回调
- 如何在调用回调之前禁用按钮
- 加载文件,然后调用回调函数
- async.retry-已调用回调
- 节点.js“已调用回调”.但是没有任何其他回调
- JavaScript - 返回承诺和/或调用回调
- 解析查询.首次成功/错误 间歇性不调用回调
- 如何使用另一个 JavaScript 文件中定义的类名调用回调函数
- ReactJs:this.setState的情况下不调用回调函数
- $.post到PHP文件-在包含循环完成之前不会调用回调
- 异步加载ASP.NET绑定的Javascript,然后调用回调
- setTimeout()在其设置时间之前连续调用回调函数
- 在其他回调js中调用回调
- Ajax 调用重新加载页面,而不是调用回调函数
- Angularjs $http.get 不调用回调
- 未调用回调函数
- jQuery JSONP 不调用回调