以下数据需要存储在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'集合中查询它。
但似乎有很多查询要生成这个列表,我想知道是否有一种更聪明的方式来编写/组合查询,而不是上面描述的方式。
答案 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
中的顺序。