在Monk中使用fineOne(),find()函数的正确方法

时间:2019-04-16 16:20:36

标签: javascript node.js mongodb express monk

我正在使用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"
          }
}

1 个答案:

答案 0 :(得分:0)

我发现嵌套findOne()函数是合理的,因为它是一个异步回调函数。然后对于这个问题,如果您想实现类似需求的东西,则必须嵌套。

cars.finOne(...).then((car) =>{
  wheels.findOne(...).then((wheel) =>{
    // create a json that contains wheels in a car object.
  }
}