const AnswerModel = new Schema({
questionid: {
type: Schema.Types.ObjectId,
ref: 'questionsModel'
}
,
allanswers: [{
user: { type: Schema.Types.ObjectId, ref: 'users' },
answers: [{
answer: {
type: String,
},
isTrue: {
type: Boolean,
default: false
},
date: {
type: Date,
default: Date.now
}
}]
}]
})
Answers.findOneAndUpdate({ questionid: ObjectId(req.body.questionid) },
{
$set: { allanswers: { user: ObjectId(req.body.userid) } },
$push: { answers: { answer: req.body.answer } }
},
{ useFindAndModify: false }
)
.then(res => console.log(res))
.catch(err => console.log(err))
上面的查询在allanswers数组中设置了用户名,但没有将新对象推送到Answers数组中。每当有人提交新答案时,我要匹配questionid,请检查用户是否已提交并之前回答,我可以通过以下方式进行操作:
Answers.findOne({ questionid: ObjectId(req.body.questionid) })
.then(onequestionanswer => {
if (onequestionanswer.allanswers.filter(oneuseranswers => oneuseranswers.user.toString() === req.body.userid).length === 0)
然后,如果还没有,我想在allanswers中设置一个新用户并添加答案答案,如果用户在我想与allanswers数组中的用户匹配之前已经提交了答案,则将新答案推送到答案数组中。有没有一种方法可以在一个查询中做到这两个,如果没有,我该如何解决我的查询以将答案推送到答案数组中的问题?
答案 0 :(得分:0)
尝试此代码,我认为它是可行的。
Answers.findOne({
$and: [
{
questionid: ObjectId(req.body.questionid)
},
{
'allanswers.user': ObjectId(req.body.userid)
}]
}).exec(function (err, result) {
if (err) {
console.log(err)
} else if (result) {
//if user match then push answer in answers array
const ansObj = { // your ans object
answer: req.body.answer,
isTrue: false,
date: new Date()
}
Answers.findOneAndUpdate({
$and: [
{ questionid: ObjectId(req.body.questionid) },
{ 'allanswers.user': ObjectId(req.body.userid) }
]
},
{
$push: { 'allanswers.$.answers': ansObj }
},
).exec(function (err, result) {
console.log(err, 'errerrerr')
console.log(result, 'resultresultresult')
})
} else {
//if user id not match push object in allanswers array
const FirstAnsObj = { //your ans object
user: new ObjectId(),
answers: [{
answer: req.body.answer,
isTrue: false,
date: new Date()
}]
}
Answers.findOneAndUpdate({ questionid: ObjectId(req.body.questionid) },
{
$push: { allanswers: FirstAnsObj }
},
).exec(function (err, result) {
console.log(err, 'errerrerr')
console.log(result, 'resultresultresult')
})
}
})
answers
数组中推送答案allanswers
数组中