【问题标题】:How can I read a value from a mongodb cursor inside the same publication where the cursor was generated如何从生成游标的同一出版物中的 mongodb 游标中读取值
【发布时间】:2017-06-20 23:51:46
【问题描述】:

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

下面是我的 mongodb 查询

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

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

【问题讨论】:

    标签: meteor


    【解决方案1】:

    您可以在光标上设置观察者并获取结果。我经常这样做以转换结果。

    例如(我假设发布名称是“问题”)

    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())。

    【讨论】:

      【解决方案2】:

      据我了解您的问题,您希望访问光标中的单个文档,而无需在代码中执行多余的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。

      【讨论】:

        猜你喜欢
        • 2013-11-17
        • 1970-01-01
        • 1970-01-01
        • 2021-07-06
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-03
        相关资源
        最近更新 更多