Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Mongodb 在节点js中使用ES6时无法获取文档_Mongodb_Ecmascript 6_Mean Stack - Fatal编程技术网

Mongodb 在节点js中使用ES6时无法获取文档

Mongodb 在节点js中使用ES6时无法获取文档,mongodb,ecmascript-6,mean-stack,Mongodb,Ecmascript 6,Mean Stack,我正在研究meanstack来创建一些web服务。 我考虑使用ES6来同步mongodb查找操作。 以下是codeUserService: var Todo = require('../models/user.js'); var db = mongoose.createConnection('mongodb://localhost:27017/abc'); var Users = db.model('User'); function *myGenerator() { return yi

我正在研究meanstack来创建一些web服务。 我考虑使用ES6来同步mongodb查找操作。 以下是codeUserService:

var Todo = require('../models/user.js');
var db = mongoose.createConnection('mongodb://localhost:27017/abc');
var Users = db.model('User');


function *myGenerator() {
   return yield Todo.find({});//Throwing Undefined function Todo.find
   //return yield Users.find({}); //DOes not returns documents but returns a json object which has full mongodb database details
}

function getDocs(){
   var iterator = myGenerator();
   var firstYield = iterator.next();
}
return yield Todo.find{}正在抛出异常未定义函数Todo.find

返回yield Users.find{};不返回文档,但返回包含完整mongodb数据库详细信息的JSON对象

返回yield Users.find{}.exec返回以下输出

{ value:
Promise {
emitter:
EventEmitter {
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined },
emitted: {},
ended: false },
done: false }
我也使用了-harmony节点js选项

您能帮我获取用户行/文档吗?

var Todo=requires'models/User.js';生成引用错误:未定义要求 应该是var Todo=require'models/user.js'

甚至可能 var Todo=require'/models/user.js';因为'models/user.js'是相对于node_modules目录的

返回Todo.find{}; 应该是yield Todo.find{}

据我所知,这段代码将抛出一个异常。 请提供实际代码和更多信息,如您当前运行的node.js版本

p、 S我在答案部分写了这篇文章,因为我还没有获得评论无处不在的特权

Todo.find{};返回查询对象。必须对该对象调用exec函数才能执行查询。e、 g

mongoose数据库连接也是异步的。因此,在建立连接之前进行的任何查询显然都不起作用。这是一个有效的例子

var mongoose = require('mongoose');
mongoose.Promise = Promise;

var db = mongoose.connect('mongodb://localhost:27017/test', (error) => {

  if (error) {
    throw error
  }

  console.log('DB Connected');

  var Todo = require('./models/user.js');

  var Users = db.model('User');


  function *myGenerator() {
    yield Todo.find({}); // Returns a Query object
    //yield Users.find({}); // Returns a Query object
  }

  function getDocs(){
    var iterator = myGenerator();
    var firstYield = iterator.next();

    // firstYield is a `Query` object

    firstYield.value.exec((error, users) => {
      if (error) {
        throw error;
      }

      console.log(users);
    })
  }

  getDocs();
});

非常感谢你,斯吉安特!我更新了我的帖子。即使删除return.Hi也没有效果,我的目的是将mysql的union selects转换为mongodb查询。此外,选择的数量也有所不同。N基于输入的选择数量。所以我想按顺序执行一个接一个的查找,并记录结果。用生成器和co等尝试了上述代码,但没有结果。我可以通过编写一个递归函数来管理它,其中每个find函数连接结果并为下一个find调用自己。很抱歉,我没有尝试将您的答案表示为已接受的答案。谢谢你的帮助!但肯定是+1。你为什么要做出承诺?getDocs函数中的任何内容都不会对它产生任何实际有用的作用。听起来您不想使用生成器,而是想使用异步/等待语法!
var mongoose = require('mongoose');
mongoose.Promise = Promise;

var db = mongoose.connect('mongodb://localhost:27017/test', (error) => {

  if (error) {
    throw error
  }

  console.log('DB Connected');

  var Todo = require('./models/user.js');

  var Users = db.model('User');


  function *myGenerator() {
    yield Todo.find({}); // Returns a Query object
    //yield Users.find({}); // Returns a Query object
  }

  function getDocs(){
    var iterator = myGenerator();
    var firstYield = iterator.next();

    // firstYield is a `Query` object

    firstYield.value.exec((error, users) => {
      if (error) {
        throw error;
      }

      console.log(users);
    })
  }

  getDocs();
});