Node.js 子节点数不确定的Mongoose Nodejs父模型

Node.js 子节点数不确定的Mongoose Nodejs父模型,node.js,mongodb,typescript,mongoose,Node.js,Mongodb,Typescript,Mongoose,我有两个猫鼬模型。一个是父母,另一个是孩子。子模型将保留父模型的引用Id。我这样做是因为有无限多的孩子可以“依附”于父母。有没有一种方法,当我运行一个查询来获取父模型时,它可以附带多少子模型的计数 const parentSchema=新的mongoose.Schema({ 建议1:{ 类型:字符串 }, 儿童人数:{ 类型:编号 } }); const childSchema=new mongoose.Schema({ 建议1:{ 类型:字符串 }, 父ID:{ 类型:Schema.Type

我有两个猫鼬模型。一个是父母,另一个是孩子。子模型将保留父模型的引用Id。我这样做是因为有无限多的孩子可以“依附”于父母。有没有一种方法,当我运行一个查询来获取父模型时,它可以附带多少子模型的计数


const parentSchema=新的mongoose.Schema({
建议1:{
类型:字符串
},
儿童人数:{
类型:编号
}
});
const childSchema=new mongoose.Schema({
建议1:{
类型:字符串
},
父ID:{
类型:Schema.Types.ObjectId,
参考:“家长”
}
});
如果我可以调用parentModel.findById()并附带所有具有parentId的“子”模型的计数,那将非常有用。为了澄清这一点,我不希望父模型中的子模型作为数组,因为子模型的数量是无限的


const parent=parentModel.findById(id);
console.log(parent.childCount)//2354

从父模式中删除
childCount
,并使用父模式
id
查询
childSchema
,以便获得您的计数

await childSchema.countDocuments({ parentId: idOfParent })
如果您想让它快速运行,还可以添加一个索引。这将允许对索引运行计数,而不是逐个扫描整个集合

编辑:

如果要获取每个父级的子级计数。你需要用一个电话,否则这将是一场噩梦

await childSchema
  .aggregate()
  .group({ _id: '$parentId', countOfChildrenPerParent: { $sum: 1 } })
  .exec();

嗯,是的,这就是我已经在尝试的。我只是不知道有没有办法不用再打电话给db就能做到。如果我最终查询了1000个父文档,那么我必须在1000个文档上运行for循环,以获得它们的子文档数。我只是好奇mongo/mongoose是否能为我以一种更优化的方式处理这个问题。感谢索引的想法,我总是忘记那个选项。这肯定会有助于加快速度。@CodyWHageman请检查更新的答案,以避免每次都循环回数据库。很好,我会尝试一下,谢谢!当我在parentModel.上使用aggregate时,是否可以使用$lookup来计算该计数。类似parentModel.aggregate([{$lookup:{from:“childModel”,…etc}]
await childSchema
  .aggregate()
  .group({ _id: '$parentId', countOfChildrenPerParent: { $sum: 1 } })
  .exec();