在服务器上多查询流星

时间:2018-06-13 19:09:58

标签: mongodb meteor

我尝试创建一个将检查其他两个集合的查询。我尝试模块publishComposite,但我没有工作。我试过这个代码,但它确实有效。有人可以通过在收集中找到帮助我" voorraad"集合中没有保留的项目" reserveringen"。这是代码设置

  Meteor.publish('Voorraad_subs', function(leverancier, start, eind) {
  return Verhuurmodule.find({leverancier: leverancier}, function(lever) {
    return Voorraad.find({module: lever._id, status: 1}, function(voor) {
      var tel = Reserveringen.find({
        object: voor._id,
        $or: [
          {
            $and: [
              {
                start: {
                  $lte: start
                },
                eind: {
                  $gte: start
                }
              }
            ]
          }, {
            $and: [
              {
                start: {
                  $lt: eind
                },
                eind: {
                  $gte: eind
                }
              }
            ]
          }, {
            $and: [
              {
                start: {
                  $gte: start
                },
                eind: {
                  $lt: eind
                }
              }
            ]
          }
        ]
      }).count();
      if (tel > 0) {
        return voor;
      }
    });
  });
});

PublsihComposite代码

Meteor.publishComposite('Voorraad_subs', function(leverancier, start, eind) {
  return {
    find: function() {
      // Find top ten highest scoring posts
      return Verhuurmodule.find({
        leverancier: leverancier
      });
    },
    children: [{
      find: function(post) {
        return Voorraad.find({
          module: post._id,
          status: 1
        });
      },
      children: [{
        find: function(voorraad) {
          return Reserveringen.find({
            object: this._id,
            $or: [{
              $and: [{
                start: {
                  $lte: start,
                },
                eind: {
                  $gte: start,
                }
              }]
            }, {
              $and: [{
                start: {
                  $lt: eind,
                },
                eind: {
                  $gte: eind,
                }
              }]
            }, {
              $and: [{
                start: {
                  $gte: start,
                },
                eind: {
                  $lt: eind,
                }
              }]
            }]
          });
        }
      }]
    }]
  }
});

1 个答案:

答案 0 :(得分:0)

看起来this._id未指向您在第3个嵌套子项中迭代的对象的_id

您还可以使用开始和结束时间简化间隔逻辑。

这是一个尝试纠正/简化:

Meteor.publishComposite('Voorraad_subs', (leverancier, start, eind) => {
  return {
    find() {
      return Verhuurmodule.find({ leverancier });
    },
    children: [{
      find(post) {
        return Voorraad.find({ module: post._id, status: 1 });
      },
      children: [{
        find(voorraad) {
          return Reserveringen.find({ object: voorraad._id,
            $nor: [{
              start: { $gt: eind }, // exclude all reservations that begin after the interval
              eind: { $lt: start }  // and all those that finish before the interval
            }]
          });
        }
      }]
    }]
  }
});

然而:我也怀疑你的记谱法。例如:

return Voorraad.find({ module: post._id, status: 1 });

module还是id?我希望在那里看到类似moduleId的内容。

同样的:

return Reserveringen.find({ object: voorraad._id, ...

objectid吗?或者你的意思是objectId