我正在使用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"
}
}
答案 0 :(得分:0)
我发现嵌套findOne()函数是合理的,因为它是一个异步回调函数。然后对于这个问题,如果您想实现类似需求的东西,则必须嵌套。
cars.finOne(...).then((car) =>{
wheels.findOne(...).then((wheel) =>{
// create a json that contains wheels in a car object.
}
}