【发布时间】:2018-04-22 12:51:23
【问题描述】:
我有一个包含具有以下结构的对象的集合
{
"dep_id": "some_id",
"departament": "dep name",
"employees": [{
"name": "emp1",
"age": 31
},{
"name": "emp2",
"age": 35
}]
}
我想按employees.age 降序对ID 为“some_id”的对象的员工数组进行排序和保存。最好的结果是使用 mongodb 的查询语言以原子方式执行此操作。这可能吗?
如果没有,如何在不影响父级其他数据或子文档数据的情况下重新排列子文档?如果我必须从数据库下载数据并保存回排序的子数组,如果其他东西对其中一个子执行更新或同时添加或删除子会发生什么?
最后,数据应该这样持久化到数据库中:
{
"dep_id": "some_id",
"departament": "dep name",
"employees": [{
"name": "emp2",
"age": 35
},{
"name": "emp1",
"age": 31
}]
}
【问题讨论】:
-
一开始为什么要这样做?
-
@dnickless,我想这样做是为了优化我的一种查询模式。我的实际对象有一个“等级”和“created_at”,我希望第一个孩子总是具有最高等级的那个,如果多个项目具有最高等级,那么数组中的第一个项目应该是最新鲜的最高等级。我可以通过查询来做到这一点,但我必须先 $unwind 然后排序,如果这样做,我可能会遇到 mongodb 的限制,当您尝试对大量数据进行排序并且排序不是聚合的第一步时会出现这种限制。
标签: mongodb mongodb-query