我有一个流星出版物,我试图使用.findOne()
访问mongodb中的字段。但由于我无法从流星发布中返回.findOne()
,我现在只使用.find()
。问题是它返回一个光标而不是一个文档,所以我无法在我的发布函数中读取该光标内的值。
以下是我的mongodb查询
var question = Question.find({ "_id": quesId },
{ fields: {"pages": 1, "settings.name": 1, "status": 1 }},
{limit: 1});
我想在同一个发布函数中使用上面查询得到的pages
的值
答案 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。