2016-09-15 59 views
0

我有一个MongoDB数据库和2个集合:programsexercises。里面programs集文档有一个包含ID的字符串表示的exercisesexercises表,这样的:有没有办法在一个查询中使用MongoDB将_id的数组映射到文档中?

{ 
    "_id" : ObjectId("57da8f955cf29df682932ee9"), 
     "exercises" : [ 
      "57da8e01d0649e646afaea4e", 
      "57da8e01d0649e646afaea4e", 
      "57da8e01d0649e646afaea4e" 
     ] 
} 

我需要这个阵列的ID映射到相关exercises对象数组。事情是,我需要按照精确的顺序,包括重复。就像在之前的文档中一样,它包含3个指向相同的exercise的链接,我需要获得3个相同的exercise作为响应。

现在我使用此查询:

db.collection("exercises").find({_id: {$in: exercises.map(exid => ObjectID(exid)) }}).toArray() 

该查询返回的每exercise我的需要,但在错误的秩序,没有重复。

我可以使用MongoDB在一个查询中实现这样的结果吗?我知道我可以做这样的事情(没有测试,只是作为一个例子):

exercises.map(exid => db.collection("exercises").find({id: ObjectID(exid)}); 

像这样的东西应该给我的阵列我需要的,但我想这是不正确的方式做它,做一个单独的查询得到一个特定的exercise

P.S.我知道我可以存储exercises文档本身,不使用外部exercises集合为,但事情是,一些program S可指同一exercise,这就是为什么我觉得我需要为这个外部集合。

回答

0

我决定从服务器获取所有exercises的查询,然后我所有的ID从这个数组从服务器映射到值。这样的:

db.collection("exercises") 
    .find({_id: {$in: g.exercises.map(exid => ObjectID(exid)) }}) 
    .toArray() 
    .then(res => g.exercises.map(exid => res.find(exs => exs._id == exid))) 

这个查询的说明:

  • (使用MongoDB的$in运营商)
  • 将其转换为阵列
  • 地图中的每个获得所有exercises与服务器对应的ID数组所述g.exercises阵列阵列的从服务器(res)的元件的元件,其中ID是相同的请求

这是1个查询请求所有我需要的数据。

希望它能帮助别人。

相关问题