在MongoDB中,对文档中的数组进行排序然后将已排序的数组存储回文档的最有效方法是什么?
对于后台,我有一个生成时间戳数据集合并将其存储到数据库的过程,但不保证按时间顺序存储。数据收集完成后,我想按时间对数据数组进行排序并将其写回数据库,因为将来对数据的所有查询都需要按时间排序。
谢谢!
答案 0 :(得分:4)
MongoDB中没有就地数组排序。将该数组读入PHP(或其他),在那里排序并保存。
db.collection.update({_id: document_id}, {$set: {myarray: [3, 2, 1]}});
稍后您将读取该数组时,它将保持排序。
答案 1 :(得分:1)
MongoDB的2.4版本提供了另一个选项,即在使用$sort
修饰符更新数组字段时按顺序保持数组字段。
db.collection.update({_id: document_id}, {
$push: {
myarray: {
$each: [{timestamp: 456, x: 1}, {timestamp: 123, x: 2}, ...],
$sort: {timestamp: 1}
}
}
});
这将导致更新文档的myarray
字段的元素按升序timestamp
排序。
如果您只想对现有元素进行排序而不添加任何新元素,请使用$each: []
:
db.collection.update({_id: document_id}, {
$push: {
myarray: {
$each: [],
$sort: {timestamp: 1}
}
}
});