#node.js #mongodb #mongoose
#node.js #mongodb #мангуст
Вопрос:
Допустим, мы запускаем оператор запроса mongodb следующим образом:
const user = await db.users.findOne(...);
console.log(user);
Результат хороший.
{
_id: 5f60647c28b90939d0e5fb24,
tenantId: '5e6f7c86e7158b42bf500371',
username: 'aaaa',
email: 'xxxx@yy.com',
createdAt: 2020-09-15T06:51:40.531Z,
updatedAt: 2020-09-15T06:51:40.531Z,
__v: 0
}
Затем мы используем деструктурирование.
const { _id, username, ...others } = user;
console.log(others);
Мы получаем странную вещь:
[
[
'$__',
InternalCache {
strictMode: false,
selected: [Object],
shardval: undefined,
saveError: undefined,
validationError: undefined,
adhocPaths: undefined,
removing: undefined,
inserting: undefined,
saving: undefined,
version: undefined,
getters: {},
_id: 5f60647c28b90939d0e5fb24,
populate: undefined,
populated: undefined,
wasPopulated: false,
scope: undefined,
activePaths: [StateMachine],
pathsToScopes: {},
cachedRequired: {},
session: undefined,
'$setCalled': Set(0) {},
ownerDocument: undefined,
fullPath: undefined,
emitter: [EventEmitter],
'$options': [Object]
}
],
[ 'isNew', false ],
[ 'errors', undefined ],
[ '$locals', {} ],
[ '$op', null ],
[
'_doc',
{
_id: 5f60647c28b90939d0e5fb24,
tenantId: '5e6f7c86e7158b42bf500371',
username: 'aaaa',
email: 'xxxx@yyy.com',
createdAt: 2020-09-15T06:51:40.531Z,
updatedAt: 2020-09-15T06:51:40.531Z,
__v: 0
}
],
[ '$init', true ]
]
Что здесь происходит? И как заставить деструктурирование снова работать? Та же ошибка на Object.entries(others)
.
Есть один обходной путь, я могу упорядочить его, а затем проанализировать обратно. Но это, очевидно, избыточно.
Ответ №1:
По умолчанию запросы Mongoose возвращают экземпляр класса документов Mongoose. Вот почему вы получаете странный результат после деструктурирования. В вашем случае вам следует использовать .lean() по вашему запросу, чтобы получить ожидаемый результат;
Комментарии:
1. Это слишком странно. Я предлагаю, чтобы Mongoose возвращал обычный объект javascript по умолчанию и возвращал класс документа Mongoose с помощью .Mdc().
Ответ №2:
это работает для меня :
const user = UserModel.findOne({...});
const { _id, username, ...others } = user.toObject();