给定的是一个包含书籍对象的数组,其中每个status
都必须更新:
var books = [
{ id: '58b2e58', status: 'pending' },
{ id: '5903703', status: 'pending' }
]
var status = {status: 'accepted'}
我尝试了this:
Book.update(books, status).exec(function afterwards(err, updatedbooks) {
if (err) {
res.json(err)
}
console.log("updatedbooks:", updatedbooks);
});
但是已经更新过的书'日志是空的。登记mongodb时,书籍就在那里,我可以用Book.find(books);
作为here mentioned,这里的工作正常,但我希望在ID旁边还有状态=="待定"在WHERE标准中。
答案 0 :(得分:1)
请试试这个。
var bookId= ['1','3'];
var status = {status: 'accepted'}
Book.update({id:bookId, status: 'pending'}, status).exec(function afterwards(err, updatedbooks) {
if (err) {
console.log('error in update\n'+err);
res.json(err)
}
else{
console.log("updatedbooks:", updatedbooks);
}
});
这应该有效。此外,如果您收到错误,它会让您知道您得到的错误。
答案 1 :(得分:0)
如果有人有正确的答案,请不要等待。我找到了一个解决方法:
find()
功能可以采用以下标准:
var bookCriteria = [
{ id: '1', status: 'pending' },
{ id: '3', status: 'pending' }
]
但update()
函数仅适用于带有ids的数组:
var bookCriteria = [ '1','3']
因此,我们首先搜索符合我们标准的书籍,然后拿走这些书籍并更新它们。
Book.find(bookCriteria).exec(function (err, booksFounded) {
//booksFounded is an array with book objects, with status = 'pending'
//but we need an array with booksFounded ids as strings
var bookIDs = booksFounded.map( book => book.id}); //['1','3']
//now update:
Book.update(bookIDs , {status:'accepted'}).exec(function afterwards(err, updatedbooks) {
if (err) {
res.json(err)
}
console.log("updatedbooks:", updatedbooks);
});
})
你有更好的解决方案吗?使用我的解决方案,它需要2个数据库事务,但它可以工作。