#node.js #mongodb
#node.js #mongodb
Вопрос:
Я добавляю пользовательский список в БД. После вызова случайного пользовательского списка пользовательский список создается со списком вложенных документов в БД. Но он показывает, что его вложенный документ в консоли равен null. Мой код ->
Моя схема вложенного документа->
const toSchema=new mongoose.Schema({
name:{ type:String,required:true}
});
Моя основная схема пользовательского списка ->
const newSchema=new mongoose.Schema({
name:String,
sch:[toSchema]
});
const Work=mongoose.model("work",newSchema);
Теперь я добавляю коллекции и показываю их на консоли ->
app.get("/post/:get",function(req,res){
var ch=req.params.get;
const item=new Todo({
name:ch
});
const work=new Work({
name:ch,
sch:item
});
work.save();
Work.findOne({name:ch},function(err,works){
if(err){
console.log(err);
}
else{
console.log(works);
}
});
});
Я набираю пользовательский список «home», и он успешно создан в
db. Но вложенный документ показывает null.
Пожалуйста, помогите.
Ответ №1:
Это видно, null
потому что .save()
он асинхронен по своей природе, поэтому вам нужно дождаться завершения его выполнения, прежде чем пытаться find
, но если вы просто хотите сохранить find
документ, который вы сохраняете, тогда вам не нужно использовать, find
поскольку .save()
возвращает документ, который вы сохраняете saving
work.save(function(err, document) {
if (err)
console.error(err);
else
console.log(document);
});
Но если вы планируете использовать, .find()
вам нужно дождаться .save()
завершения выполнения
Ответ №2:
Он показывает null, потому что в вашей схеме вы объявили sch
как массив и пытаетесь сохранить объект в нем.
const newSchema=new mongoose.Schema({
name:String,
sch:[toSchema] // Declared Array
});
const Work=mongoose.model("work",newSchema);
Вот почему он равен null.
Если вы хотите сохранить в нем объект (в вашем случае const item
), то вам нужно объявить sch
как объект. Измените свой newSchema
, как указано ниже
const newSchema = new mongoose.Schema({
name:String,
sch:{toSchema}
});
const Work=mongoose.model("work",newSchema);
Тогда это работает.
Комментарии:
1. Да, теперь я решил свою проблему. Я использовал метод «insertMany» вместо «сохранить», а затем в метод «insertMany» я добавил метод «find» в другую часть метода «insertMany». Спасибо, что помогли мне.