如何更新以排序数组的元素?

时间:2018-01-02 02:12:32

标签: javascript node.js mongodb mongoose

数据库样本......

 { "code" : "2156",
    "trades" : [ 
        {
            "close" : 78000,
            "date" : "2017.11.08"
        }, 
        {
            "close" : 25300,
            "date" : "2017.08.07"
        }, 
        {
            "close" : 74900,
            "date" : "2017.11.07"
        }
    ] 
 },
  { "code" : "2158",
    "trades" : [ 
        {
            "close" : 79000,
            "date" : "2017.11.08"
        }, 
        {
            "close" : 24300,
            "date" : "2017.08.07"
        }, 
        {
            "close" : 71900,
            "date" : "2017.11.07"
        }
    ] 
 }

以上是我存在的mongodb数据样本。我想要做的是通过 date asc trades中排列对象。所以它应该像这样安排

    "trades" : [ 
        {
            "close" : 24300,
            "date" : "2017.08.07"

        }, 
        {
            "close" : 71900,
            "date" : "2017.11.07"
        }, 
        {
            "close" : 79000,
            "date" : "2017.11.08"
        }
    ] 

有没有办法做到这一点?我正在使用Node.js和Mongoose。 我已经查看了这篇文章:

how to sort array inside collection record in mongoDB

但它看起来没有订购db本身,它只是查询db到某些条件,对吧?有没有办法订购db本身?

2 个答案:

答案 0 :(得分:1)

您可以$sort修饰符来对数组中的元素进行排序。 multi:true将更新应用于多个文档。

这样的东西
db.collection_name.update( { }, { $push: { trades: { $each: [ ], $sort:{date:1}} } }, {multi: true } )

答案 1 :(得分:0)

"订购数据库"真的没必要。如果您在要查询的字段上创建索引,MongoDB将有效地" order"这些适合你。

以下是MongoDB关于创建索引的说明:https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/

因为你用node.js标记了这个,我假设你正在使用mongoose。在这种情况下,您可以将{index:true}添加到架构定义中。

Mongoose关于定义模式索引的说明: http://mongoosejs.com/docs/3.4.x/docs/guide.html#indexes