У меня есть схема ниже
const ButtonSchema = new mongoose.Schema({
conditions: mongoose.Schema.Types.Mixed
})
// Data Model
const DataSchema = new mongoose.Schema({
buttons: [ButtonSchema],
__v: {type: Number, default: 0}
})
//Question Model
const QuestionSchema = new mongoose.Schema({
data: [DataSchema],
__v: {type: Number, default: 0}
})
// Dialog Model
const Dialog = mongoose.model('Dialog', new mongoose.Schema({
name: String,
questions: [QuestionSchema]
}))
, по сути, объект похож на этот
{
"download_data": [
{
"__v": 0,
"data": [
{
"text": [
"xxxx"
],
"__v": 0,
"buttons": [],
"_id": "5afdf6cf1c1cc542c4580511",
"conditions": {
"false": {
"type": "endDialog",
"data": [
{
"text": []
}
]
}
}
}
],
"_id": "5afdf6cf1c1cc542c4580510",
"type": "confirm"
},
{
"__v": 0,
"data": [
{
"text": [
"xxxx"
],
"__v": 0,
"buttons": [],
"_id": "5afdf6cf1c1cc542c458050f"
}
],
"_id": "5afdf6cf1c1cc542c458050e",
"type": "endDialog"
}
]}
Как видите, у меня есть уникальные идентификаторы для объекта вопроса и идентификаторыдля объектов данных
Во время обновления в идеале я хотел бы обновить только определенное поле данных с помощью _id
. Я могу получить конкретный вопрос с помощью этого
return DialogSchema.findOne({'questions._id': req.params.subId})
.then(function(data){
// this doesnt work
return data.questions[req.params.index].update(req.body)
})
.then(function(data){
console.log('data :', data)
})
.catch(function(err){
console.log('err: ', err)
})
Нов идеале я хотел бы просто получить объект DataSchema (вставленный в виде объектов массива в объект QuestionsSchema)
, но это не работает
return DialogSchema.findOne({'questions.data._id': req.params.subId})
.then(function(data){
console.log('data : ', data)
})
.catch(function(err){
console.log('err: ', err)
})
Есть ли способ, которым я могу это сделать?