2017-06-20 17 views
1

我有一个流星出版物,其中我尝试使用.findOne()来访问mongodb中的字段。但是,由于我不能从流星发布返回.findOne(),我现在只使用.find()。问题是它返回一个游标而不是文档,所以我无法读取我的发布函数中该游标内的值。如何从生成光标的同一出版物中的mongodb光标读取值

下面是我的MongoDB查询

var question = Question.find({ "_id": quesId }, 
    { fields: {"pages": 1, "settings.name": 1, "status": 1 }}, 
    {limit: 1}); 

而且我想用pages的价值,我从上面的查询进去相同的发布功能

回答

0

,你可以在你的光标设定的观察员,获得结果的钩子。我经常这样做来改变结果。

例如(我想提出的是,公布名称的假设是“问题”)

let cursor = Question.find({ "_id": quesId }, { "pages": 1, "settings.name": 1, "status": 1 }, {limit: 1}); 

let handle = cursor.observeChanges({ 
    added: (id, fields) => { 
     // look at fields 
     this.added('questions', id, fields); 
    }, 
    changed: (id, fields) => { 
     // look at fields 
     this.changed('questions', id, fields); 
    }, 
    removed: (id) => { 
     this.removed('questions', id); 
    } 
}); 

this.ready(); 

this.onStop(() => { 
    handle.stop(); 
}); 

这会给你一个钩成在初始添加发布和变更后的记录。当您的出版物准备好发布时,请调用ready()(您可以在示例中看到this.ready())。

0

据我了解你的问题,你想访问光标中的单个文档,而不需要在代码中执行多余的findOne()。您可以将结果转换为光标上的.fetch(),使用[0]获得第一个条目,然后直接获取pages属性。

const question = Question.find(quesId, 
    { fields: { "pages": 1, "settings.name": 1, "status": 1 }}); 
const pages = question.fetch()[0].pages; 

还要注意,在_id搜索时,你不必在你的过滤器来指定{_id: quesId},你可以直接使用你想要作为过滤参数来搜索的价值,蒙戈假设您正在搜索的_id。此外,{limit: 1}是多余的,因为您正在搜索标量_id的值,因此可以保证游标长度为1。