Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 对象#<;承诺>;没有方法';限制';_Node.js_Mongodb_Mongodb Query - Fatal编程技术网

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是的,这是你的问题,这就是答案。您试图在代码中返回的对象不是“结果”,而是“承诺对象”,因此出现了错误。这向您展示了如何通过更改代码从该对象获得结果。它还解决了您似乎希望返回的对象就是刚才插入的对象的问题。您的代码可能不会这样做,并且列出了另一种确保这一点的方法。