首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongojs不执行CRUD操作

mongojs不执行CRUD操作
EN

Stack Overflow用户
提问于 2015-08-13 17:08:14
回答 1查看 116关注 0票数 0
代码语言:javascript
复制
 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应用程序中工作,我没有收到任何错误?

EN

回答 1

Stack Overflow用户

发布于 2015-08-13 17:56:14

我猜想你实际上是在给db.close()打电话,但没有在你的问题中告诉我们。这一点,以及当你访问.find()数据时看不到输出的情况,主要是因为这里的方法是“异步的”,你需要“等待”你想要的回调执行。

此外,这里的.forEach()方法应该“谨慎”使用,因为它几乎不是您在生产代码中真正想要的。下面是通过"async"库提供的一些异步流控制帮助,同样可以很好地工作:

代码语言:javascript
复制
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"接口:

代码语言:javascript
复制
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提供了.pipe()example

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31983960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档