我尝试创建一个将检查其他两个集合的查询。我尝试模块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,
}
}]
}]
});
}
}]
}]
}
});
答案 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, ...
object
是id
吗?或者你的意思是objectId
?