Образец БД ...

 { "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. Я хочу расположить объекты в trades по возрастанию даты . Так должно быть устроено вот так

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

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

Есть какой-либо способ сделать это? Я использую Node.js и Mongoose. Я уже проверял эту статью:

как отсортировать массив внутри записи коллекции в mongoDB

Но похоже, что не заказывает сам db, он просто запрашивает db для определенных условий, верно? Есть ли способ заказать сам db?

1
Juntae 2 Янв 2018 в 05:12

2 ответа

Лучший ответ

Вы можете использовать модификатор $sort для упорядочить элементы в массиве. multi:true, чтобы применить обновления к нескольким документам.

Что-то типа

db.collection_name.update( { }, { $push: { trades: { $each: [ ], $sort:{date:1}} } }, {multi: true } )
1
Sagar Veeram 2 Янв 2018 в 13:07

«Заказывать БД» действительно не нужно. Если вы создаете индексы для полей, по которым хотите выполнить запрос, MongoDB эффективно «упорядочит» их за вас.

Вот инструкции MongoDB по созданию индексов: https: //docs.mongodb. com / manual / reference / method / db.collection.createIndex /

Поскольку вы отметили это с помощью node.js, я предполагаю, что вы используете мангуста. В этом случае вы можете добавить {index: true} к определению схемы.

Инструкции Mongoose по определению индексов для схем: http://mongoosejs.com/docs/3.4.x/docs/ guide.html # indexes

0
Jim B. 2 Янв 2018 в 03:21