【发布时间】:2016-02-25 07:45:48
【问题描述】:
我正在使用 mongodb v.2.6.11 和猫鼬。
我有两个具有 OneToMany 关系的模型。在我的父母 TypeA(简称 TA)中,我没有提到孩子。在我的孩子 TypeB(缩写为 TB)中,我有一个对父母的 id 引用。
示例架构:
var TASchema = {
name: {type: String, required: "TASchema.name is required", index: {unique: true, dropDups: true}}
};
var TBSchema = {
start: {type: Number, required: "TBSchema.language is required"},
stop: {type: Number, required: "TBSchema.stop is required"},
TA: {type: Schema.Types.ObjectId, ref: 'tbschema'},
}
我想要做的:选择在两个变量“ts_start”和“ts_stop”(它们是时间戳)的时间跨度内具有“start”变量的所有 TB。比如:start : {$gte: ts_min, $lte : ts_max}。
示例输出:
[
{
name: "Ta object 1",
tbs: [{start : 1, stop2}, {start: 2, stop: 3}]
},
{
name: "Ta object 2",
tbs: [{start : 1, stop2}, {start: 2, stop: 3}]
}
]
我想保留查询返回 TA 数组的结构,其中每个 TA 都包含一个 TB:s 数组。但我不能使用populate,因为 TA 没有对孩子的任何引用(因为可能有太多无法将它们保留为子文档)。
那么这是如何实现的呢?我是不是想错了,或者我应该怎么做才能像我的示例输出那样输出指定的查询?
【问题讨论】:
-
通过填充 TA 的给定标准选择您的 TB 文档。通过按 TA 分组重新格式化 TB 的响应数组。您可以尝试使用 $group 请求来实现此目的,但使用 javascript 处理文档更容易,请求会更快
标签: node.js mongodb mongoose reverse populate