如何更新数组中的数据- Mongoose



我想更新bookData数组中的percentageOfReading变量,你们能帮我吗?

这是我的数据库结构:

{
"_id": {
"$oid": "61181e4243613b2e643630cf"
},
"ownerId": "tKfJT-a6",
"libraryId": "PRhs40DA",
"libraryName": "Igor's Library",
"__v": 0,
"books": [{
"bookData": {
"bookId": "-DgQCwAAQBAJ",
"percentageOfReading": 0
}
}]
}

因此,我想将percentageOfReading值从0更改为任何其他数字,并且我使用了此代码,但无论如何它是错误的:

libraryModel.updateOne({'books.bookId': bookId}, {'$set': {
'books.$.bookData.percentageOfReading': `${readingPercentage}`
}}, function err() {
console.log("Erro")
});

过滤器文档应该指定books.bookData.bookId,而不是books.bookId

libraryModel.updateOne(
{'books.bookData.bookId': bookId}, 
{'$set': {'books.$.bookData.percentageOfReading': `${readingPercentage}`}}, 
function(error) {
console.error(error.message,error.stack)
}
);

香草溶液

一定要记住books是一个对象数组,a是libraryModel的嵌套子对象。

首先找到library;遍历图书的books子集合,访问属性进行更新,然后使用发出的library参数保存。

这是我如何用好的老香草技术解决你的问题。

libraryModel.findOne({ 'ownerId': 'tKfJT-a6' }).exec((err, library) => {
if (err) {
throw err
}
library.books.filter(book => book.bookData.bookId === '-DgQCwAAQBAJ')[0]
.bookData.percentageOfReading = 95;
library.save()
})
推荐

通过避免子集合上的嵌套对象来简化模式。这将加快数据检索的速度,因为代码将更加简洁。

const recommendedLibrary = new mongoose.Schema({
ownerId: String,
libraryId: String,
libraryName: String,
books: [{ 
bookId: String, 
percentageOfReading: Number 
}]
})
  • 考虑上述问题中的update语句将是有效的。

最新更新