如何从生成光标的同一发布中的mongodb游标中读取值

时间:2017-06-20 11:55:16

标签: meteor

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

以下是我的mongodb查询

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

我想在同一个发布函数中使用上面查询得到的pages的值

2 个答案:

答案 0 :(得分:0)

您可以在光标上设置观察者并获取结果的钩子。我经常这样做来改变结果。

e.g。 (我假设发布名称是"问题")

printData(){
    this.printer.print("Test Data").then(function () {
        alert("Printed");
    }, function () {
        alert("Printing Error");
    });
}

这将为您提供初始发布时添加的记录的挂钩,并在以后进行更改。当您的出版物准备好发布时调用ready()(您可以在示例中看到this.ready())。

答案 1 :(得分: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},您可以直接使用要搜索的值作为过滤器参数,mongo假设您正在_id上搜索。此外,{limit: 1}是多余的,因为您正在搜索标量_id值,因此您可以保证游标长度为1。