#node.js #mongoose #mongoose-schema
#node.js #мангуст #мангуст-схема
Вопрос:
Метод findByIdAndUpdate должен обновлять или вставлять объект в БД, но он ничего не делает. Также он не выдает сообщение об ошибке или что-то в этом роде.
Я также пробовал это с исходным идентификатором объекта в качестве поля _id, но тоже не работает.
Кто-нибудь знает, чего не хватает для обновления или вставки объекта в БД?
const schema = new Schema({
_id: {
type: Number,
required: true
},
name: {
type: String,
required: true
}
}, { toJSON: { virtuals: true } });
const myJson = {
"myobject": {
"_id": 781586495786495,
"name": "MyName"
}
}
const MyModel = mongoose.model('MyModel', schema);
MyModel.findByIdAndUpdate(myJson.myobject._id, myJson.myobject, { upsert: true });
Комментарии:
1. Попробуйте это:
MyModel.findByIdAndUpdate(ObjectId(myJson.myobject._id), myJson.myobject, { upsert: true });
2. Не работает: приложение выдает ошибку: ReferenceError: Схема не определена. Также пробовал это со схемой. Типы.Число.
3. Вам нужно:
const Mongoose = require('mongoose'); const Schema = Mongoose.Schema;
Кроме того, почему вы сохраняете свой _id в схеме, вам это не нужно, поскольку это идентификатор mongo.4. Этот фрагмент не включает в себя инструкции require, чтобы сохранить его бережливым, но в фактическом коде эти инструкции включены.
5. Я не позволяю Mongo генерировать поле _id, потому что я получаю уникальный ключ из объекта json.
Ответ №1:
Я использовал ваш код, и он действительно работает так, как задумано. Причина, по которой он не возвращает никаких ошибок и ничего не делает, может заключаться в том, что вы не подключены к базе данных во время выполнения операции над моделью.
Пожалуйста, рассмотрите следующий фрагмент, у меня это сработало.
mongoose.connect('mongodb://localhost:27017/testingcollection').then(() => {
const schema = new mongoose.Schema({
_id: {
type: Number,
required: true
},
name: {
type: String,
required: true
}
}, { toJSON: { virtuals: true } });
const myJson = {
"myobject": {
"_id": 781586495786495,
"name": "MyName"
}
};
const MyModel = mongoose.model('MyModel', schema);
MyModel.findByIdAndUpdate(myJson.myobject._id, myJson.myobject, { upsert: true }).then(obj => {
mongoose.connection.close();
});
});
Комментарии:
1. Этот вызов возвращает только запрос A.findByIdAndUpdate(идентификатор, обновление, параметры) // возвращает запрос
2. Но этот выполняет его: A.findByIdAndUpdate (идентификатор, обновление, параметры, обратный вызов)