Mongodb 在节点js中使用ES6时无法获取文档
我正在研究meanstack来创建一些web服务。 我考虑使用ES6来同步mongodb查找操作。 以下是codeUserService: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
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();
});