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

The right way to use fineOne(), find() functions in Monk

我正在使用 expressjs 和 Monk 构建一个 RESTful API。有一个要求,我应该从不同的 collections (One-to-Many) 中抓取多个文档。但我不确定如何实现它。

例如,我需要从 Cars collection 中获取一个汽车信息,并从 Wheels collection 中获取 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(是否有其他方法可以实现 One-to-Many 映射?)。我期待这样的事情:

collection 我们有车

{
  {
    name:"c300",
    wheeltype:["A","B","C"]
  }
  {
    name:"R100",
    wheeltype:["E","F","C"]
  }
}

collection 车轮我们有

{
  {
    type:"A",
    Brand:"BestWheel"
  }
  {
    type:"C",
    Brand:"GoodWheel"
  }
}

在操作之后,我将其作为输出

{
   name:"c300",
   wheel:{
           Brand:"BestWheel",
           type:"A"
          }
}

我觉得嵌套 findOne() 函数是合理的,因为它是一个异步回调函数。那么这道题如果要实现需求之类的,nested是必须的。

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