【问题标题】:mongojs not doing CRUD operationsmongojs 不做 CRUD 操作
【发布时间】:2015-08-13 09:08:13
【问题描述】:
 var connection_string = 'localdb'; //local db by default

 var mongojs = require('mongojs');
 var collections = ['projects', 'homeAnimationData'];
 var db = mongojs(connection_string, collections);

 db.homeAnimationData.save({image: '/imagea', width: '200px'}, function(err, saved) {
   if( err || !saved ) console.log('not saved');
   else console.log('Saved');
 });      

 db.homeAnimationData.find({}).limit(10).forEach(function(err, doc) {
   if (err) throw err;
   if (doc) {
      console.dir(doc);
   }
 });

没有一个控制台在 nodejs 应用程序中工作,我没有收到任何错误?

【问题讨论】:

    标签: node.js mongodb mongodb-query mongojs


    【解决方案1】:

    我怀疑您实际上是在致电db.close(),但没有在您的问题中告诉我们。那个,当你去.find()数据时看不到输出的情况主要是因为这里的方法是“异步”的,你需要“等待”你想要的回调执行。

    这里的.forEach() 方法也应该“谨慎”使用,因为它几乎从来都不是你在生产代码中真正想要的。在 "async" 库的一点异步流控制帮助下,这同样可以正常工作:

    var localdb = 'localdb',
        async = require('async'),
        mongojs = require('mongojs'),
        collections = ['projects','homeAnimationData'],
        db = mongojs(localdb,collections);
    
    
    async.series(
      [
        function(callback) {
          db.homeAnimationData.remove({},callback);
        },
        function(callback) {
          var data  = { "image": "/imagea", "width": "200px" };
          db.homeAnimationData.save(data,function(err,saved) {
            if (err) callback(err);
            console.log('Saved');
            callback();
          });
        },
        function(callback) {
          db.homeAnimationData.find({}).limit(10).toArray(function(err,docs) {
            if (err) callback(err);
            console.dir(docs);
            callback();
          });
        }
      ],
      function(err) {
        if (err) throw err;
        db.close();
      }
    );
    

    或者替代调用.toArray()方法,你可以使用原生提供的"stream"接口:

    var localdb = 'localdb',
        async = require('async'),
        mongojs = require('mongojs'),
        collections = ['projects','homeAnimationData'],
        db = mongojs(localdb,collections);
    
    
    async.series(
      [
        function(callback) {
          db.homeAnimationData.remove({},callback);
        },
        function(callback) {
          var data  = { "image": "/imagea", "width": "200px" };
          db.homeAnimationData.save(data,function(err,saved) {
            if (err) callback(err);
            console.log('Saved');
            callback();
          });
        },
        function(callback) {
          var cursor = db.homeAnimationData.find({}).limit(10);
    
          cursor.on('data',function(data) {
            cursor.pause();
            console.dir(data);
            cursor.resume();
          });
    
          cursor.on('err',callback);
    
          cursor.on('end',callback);
        }
      ],
      function(err) {
        if (err) throw err;
        db.close();
      }
    );
    

    在后一种情况下,这可以让您更好地处理更大的结果。 mongojs 文档本身为 JSONStream 提供了 example.pipe()

    但一切正常,您只需要记住这是“异步”编程,并在逻辑上等待执行完成,然后再继续“读取”写入的数据,或者关闭数据库连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 2016-12-16
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 2021-07-18
      相关资源
      最近更新 更多