根据集合B中的数组,在集合A中查找一组文档

时间:2014-08-06 08:41:58

标签: mongodb

以下数据需要存储在MongoDb中:

的集合(约100-2000)及其相关属性。 另一个队列的集合(大约5-50)。

有关人与队列之间关系的信息。每个人都可以排成几队,每个队列可以容纳几个人。排队等候的人的顺序很重要。

目前这就是我的想法:

人:

{
  _id: ObjectId("507c35dd8fada716c89d0001"),
  first_name: 'john',
  email: 'john.doe@doe.com'
  id_number: 8101011234,
  ... 
},

队列:

{
  _id: ObjectId("507c35dd8fada716c89d0011"),
  title: 'A title for this queue',
  people_waiting: [
    ObjectId("507c35dd8fada716c89d0001"),
    ObjectId("507c35dd8fada716c89d0002"), 
    ObjectId("507c35dd8fada716c89d0003"), 
    ...
  ]
},

在网页中,我想列出(按顺序)站在某个队列中的所有人。我想我首先需要从'Queues'集合中查询'people_waiting'数组。然后通过这个数组循环,并为每个项目从'Persons'集合中查询它。

但似乎有很多查询要生成这个列表,我想知道是否有一种更聪明的方式来编写/组合查询,而不是上面描述的方式。

1 个答案:

答案 0 :(得分:1)

您只能在MongoDB中一次查询一个集合,因此它确实需要两个查询。但您可以使用$in而不是循环遍历数组并单独查询每个人。

在shell中:

queue = db.Queues.findOne({_id: idOfQueue});
peopleWaiting = db.Persions.find({_id: {$in: queue.people_waiting}}).toArray();

peopleWaiting不会按队列中ID的顺序排序,并且不支持在MongoDB查询中执行此操作。因此,您必须在代码中重新排序peopleWaiting以匹配queue.people_waiting中的顺序。