【发布时间】:2019-09-06 19:39:45
【问题描述】:
我正在使用 expressjs 和 Monk 构建一个 RESTful API。有一个要求,我应该从不同的集合(一对多)中获取多个文档。但我不确定如何实现它。
例如,我需要从 Cars 集合中获取一辆车信息,并从 Wheels 集合中获取 4 个轮子。我知道我应该使用 findOne() 来查找汽车,然后我可以从那里访问轮子的类型。
代码是这样的
var wheelType;
cars.findOne({_id: "C300"}).then((car) => {
wheelType = car["wheeltype"];
})
这就是重点。我现在有了汽车信息,但我无法在范围之外定义一个变量来保存值,并启动一个新的 find() 函数来收集车轮信息。
当然,我可以尝试像这样在 .then() 中做所有事情
cars.findOne({_id: "C300"}).then((car) => {
wheels.findOne({type: car["wheeltype"][0] }).then((wheel) => {
// combind the car with wheel
})
})
但是,如果我要收集更多详细信息怎么办?我只嵌套 findOne() 函数吗?
我可能将 MySQL 的想法错误地适用于 MongoDB(还有其他方法可以实现一对多映射?)。我期待这样的事情:
收集我们拥有的汽车
{
{
name:"c300",
wheeltype:["A","B","C"]
}
{
name:"R100",
wheeltype:["E","F","C"]
}
}
我们拥有的收集轮
{
{
type:"A",
Brand:"BestWheel"
}
{
type:"C",
Brand:"GoodWheel"
}
}
在操作之后,我将其作为输出
{
name:"c300",
wheel:{
Brand:"BestWheel",
type:"A"
}
}
【问题讨论】:
-
如果我是正确的,你有一个对象数组,对吧?在 Mongo 中,就是这样。
-
是的,我可能应该使用
[<Wheel>...]来表示它。我在这里简化了问题,但是对于我的大部分代码,数组中的元素只是指向其他集合中文档的 ObjectID -
那么您介意更新对象吗?我认为这比你想象的要容易,但你需要做一些事情来简化你的生活。据我了解,每种类型都与一个品牌有关,对吧?例如A 型是 BestWheel。另外,第二个问题,你可以修改 Mongo 中的对象还是设置它们,你只需要从中收集数据?
-
我想我误解了你。当您说对象时,我假设您正在谈论集合中的文档。然后,我的问题应该是“我们如何在 Monk 中进行对象关系映射。更改问题中的内容仍然可以吗?由于结构在需求规范中,我只能在 Mongo 中进行很少的更改。跨度>
-
抱歉没有回复我昨天生病了。你设法解决了吗?如果没有,我会帮助你。
标签: javascript node.js mongodb express monk