Node.js 对象#<;承诺>;没有方法';限制';
当我运行代码时Node.js 对象#<;承诺>;没有方法';限制';,node.js,mongodb,mongodb-query,Node.js,Mongodb,Mongodb Query,当我运行代码时 var collection = db.get('categories'); console.log(collection.find().limit(1).sort( { _id : -1 } )); 在使用mongodb的NodeJ上,我得到的错误对象#没有方法“limit”。我是一个node的初学者,并且非常专注于node的这一部分 下面是获取最后一个插入文档的完整代码 router.post('/addcategory', function(req, res) {
var collection = db.get('categories');
console.log(collection.find().limit(1).sort( { _id : -1 } ));
在使用mongodb的NodeJ上,我得到的错误对象#没有方法“limit”。我是一个node的初学者,并且非常专注于node的这一部分
下面是获取最后一个插入文档的完整代码
router.post('/addcategory', function(req, res) {
// Set our internal DB variable
var db = req.db;
// Get our form values. These rely on the "name" attributes
var name = req.body.name;
var description = req.body.description;
// Set our collection
var collection = db.get('categories');
// Submit to the DB
collection.insert({
"name" : name,
"description" : description,
}, function (err, doc) {
if (err) {
// If it failed, return error
res.send("There was a problem adding the information to the database.");
}
else {
// And forward to success page
/******************/
console.log(collection.find().limit(1).sort( { _id : -1 } ));
/*************/
}
});
});
该方法仍然是异步的,因此您仍然需要使用
.then()
作为承诺或回调调用itm。没有任何方法是同步的,并且可以在线返回结果
此外,从驱动程序返回的结果是“游标”,而不是您期望的对象。您可以迭代返回的光标,也可以使用.toArray()
或类似工具来转换:
collection.find().limit(1).sort({“\u id”:-1}).toArray().then(函数(文档){
console.log(文档[0]);
});
或:
collection.find().limit(1).sort({“\u id”:-1}).toArray(函数(err,docs){
console.log(文档[0]);
});
但事实上,整个前提是不正确的。您似乎基本上想要返回刚刚插入的内容。如果代码中有更正,则返回的文档不一定是您刚才插入的文档,而是插入到集合中的最后一个文档,它可能是从另一个操作或从另一个源对此路由的调用中发生的
如果希望返回插入的内容,请调用该方法并检查结果:
collection.insertOne({“name”:name,“description”:description},函数(err,result){
如果(错误){
res.send(“出现错误”);
}否则{
console.log(result.ops)
}
});
.insert()
方法被认为已弃用,但基本上返回相同的结果。需要考虑的是,它们返回一个对象,其中ops
属性包含插入的文档及其\u id
值,这里缺少的关键信息是您使用的是Monk,而不是本机MongoDB Node.JS驱动程序。用于find()
的命令是如何使用本机驱动程序(上面@BlakesSeven建议对异步性进行更改),但Monk的工作方式略有不同
请尝试以下方法:
collection.find({}, { limit : 1, sort : { _id : -1 } }, function (err,res) {
console.log(res);
});
您使用的是哪个版本的mongodb驱动程序?如果更改
var collection=db.get('categories'),是否有帮助代码>到var collection=db.collection('categories')代码>?您在mongodb中使用什么模块?@JoGoFo当我这样做时,我得到了这个错误对象#没有方法“collection”
@mscdex我在使用mongo和monk,我不确定它是否正确var mongo=require('mongodb');var monk=require('monk');var db=monk('localhost:27017/glass')
我在输入代码时遇到了这个错误TypeError:Object#没有方法“限制”
。我不知道我错在哪里。@Mohammed是的,这是你的问题,这就是答案。您试图在代码中返回的对象不是“结果”,而是“承诺对象”,因此出现了错误。这向您展示了如何通过更改代码从该对象获得结果。它还解决了您似乎希望返回的对象就是刚才插入的对象的问题。您的代码可能不会这样做,并且列出了另一种确保这一点的方法。