Итак, у меня проблема с пониманием того, как работает операция Mongo .create
и .findAndUpdate
.У меня есть mongoose 5.4.2X и модель со схемой, которая имеет множество пар key:value
(без вложенных объектов) в точном порядке ( в приведенном ниже коде, который я использую 1. 2. 3. и т. Д., Чтобы показать вамправильный порядок ) примерно так:
let schema = new mongoose.Schema({
1.code: {
type: String,
required: true
},
2.realm: {
type: String,
required: true,
},
3.type: {
type: String,
required: true,
enum: ['D', 'M'],
},
4.open: Number,
5.open_size: Number,
6.key: typeof value,..
7...another one key: value like previous one,
8.VaR_size: Number,
9.date: {
type: Date,
default: Date.now,
required: true
}
});
и объект class
, которые имеют абсолютно одинаковые свойства в том же порядке как схема выше.
Когда я формирую данные для Mongo через const contract = new Class_name (data)
и используя console.log(contract)
, у меня есть необходимый объект со свойствами в точный правильный порядок , например:
Contract {1.code: XXX, 2.realm: YYY, 3.type: D, .... 8.VaR_size: 12, 9.date: 327438}
, но когда я пытаюсьдля создания / обновления документа в БД через findOneAndUpdate
или (findByID) он записывает в алфавитном порядке, но не обязательно 1-> 9, например:
_id:5ca3ed3f4a547d4e88ee55ec
1.code:"RVBD-02.J"
7.VaR:0.9
(not the 1->9)...:...
8.VaR_size:0.22
__v:0
5.avg:169921
Полный фрагмент кода для записи:
let test = await contracts.findOneAndUpdate(
{
code: `${item_ticker}-${moment().subtract(1, 'day').format('DD.MMM')}` //how to find
},
contract, //document for writinng and options below
{
upsert : true,
new: true,
setDefaultsOnInsert: true,
runValidators: true,
lean: true
}
).exec();
Да, я прочитал документы mongoose и не нашел ни одного параметра для решения моей проблемы, или, возможно, некоторые дополнительные параметры имеют значение, но описания для этого нет.
Это не мой первый проект, забавно то, что когда явставка тонны документов через .insertMany
документы вставляются в соответствии с порядком схемы (не в алфавитном порядке)
Мой единственный вопрос:
Как это исправить?Есть ли опция param или она входит в findAnd....
операций?Если решения не существует, что мне делать, если для меня необходимо правильно упорядочить и проверить наличие документа перед его вставкой?
Обновление # 1, через некоторое время я перефразирую свой поисковый запрос для Google инайти соответствующий вопрос по SW здесь: Порядок полей MongoDB и изменение положения документа после обновления