我正在使用node.js/express,并且我有一个Mongodb来存储一些数据集。用户可以在网页上输入,编辑和删除数据(一切正常)。例如,要添加数据,我具有以下代码:

 router.post('/addset', function(req,res) {
    var db = req.db;
    var collection = db.get('paramlist');
    collection.insert(req.body, function(err, result){
        res.send(
            (err === null) ? { msg: '' } : { msg: err }
        );
    });
});

在我的app.js文件中,包括以下几行
// Database
var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/paramSet1');


app.use(function(req,res,next){
    req.db = db;
    next();
});

使在其余代码中可以访问数据库(在本教程之后:http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/,我是这些方面的初学者)。

因此,所有这些工作正常。我的问题如下:我想添加一个测试,如果数据库中已经存在具有相同名称的数据集,并向用户发送消息。按照这个答案How to query MongoDB to test if an item exists?我尝试使用collection.find.limit(1).size(),但出现错误
undefined is not a function

我尝试了以下方法。在上述费用中(router.post),我尝试在var集合后添加...
var findValue = collection.find({name:req.body.name});

如果我再做console.log(findValue),我会得到一个巨大的输出JSON。然后,我尝试了console.log(findValue.next()),但遇到相同的错误(未定义不是函数)。我也试过了
collection.find({name:req.body.name}).limit(1)


collection.find({name:req.body.name}).limit(1).size()

也会出现此错误。因此,总而言之,collection.insert,collection.update和collection.remove都可以​​工作,但find()不能。另一方面,当我进入mongo shell时,该命令运行正常。

如有任何提示和想法,我将不胜感激。

编辑:
console.log(findValue)的输出是:
    { col:
   { manager:
      { driver: [Object],
        helper: [Object],
        collections: [Object],
        options: [Object],
        _events: {} },
     driver:
      { _construct_args: [],
        _native: [Object],
        _emitter: [Object],
        _state: 2,
        _connect_args: [Object] },
     helper: { toObjectID: [Function], isObjectID: [Function], id: [Object] },
     name: 'paramlist',
     col:
      { _construct_args: [],
        _native: [Object],
        _emitter: [Object],
        _state: 2,
        _skin_db: [Object],
        _collection_args: [Object],
        id: [Object],
        emitter: [Object] },
     options: {} },
  type: 'find',
  opts: { fields: {}, safe: true },
  domain: null,
  _events: { error: [Function], success: [Function] },
  _maxListeners: undefined,
  emitted: {},
  ended: false,
  success: [Function],
  error: [Function],
  complete: [Function],
  resolve: [Function],
  fulfill: [Function],
  reject: [Function],
  query: { name: 'TestSet1' } }

最佳答案

find返回cursor,而不是匹配的文档本身。但是更适合您的情况是使用 findOne :

collection.findOne({name:req.body.name}, function(err, doc) {
    if (doc) {
        // A doc with the same name already exists
    }
});

关于javascript - node.js:当collection.insert工作时,Mongodb db.collection.find()无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31088663/

10-14 04:57