我无法通过api更新阵列卡。我有doc board:
{
"_id" : ObjectId("59e096a7622a3825ac24f343"),
"name" : "1",
"users" : [
ObjectId("59cd114cea98d9326ca1c421")
],
"lists" : [
{
"list" : "1",
"cards" : [
{
"name" : "2",
"Author" : [
"59df60fb6fad6224f4f9f22d",
"59df60fb6fad6224f4f9f22d",
"59df60fb6fad6224f4f9f22e"
]
},
{
"name" : "3",
"Author" : []
}
]
},
{
"list" : "fea",
"cards" : [
{
"name" : "card",
"Author" : []
}
]
}
],
"__v" : 0 }
我用以下函数创建函数,即:
cardsObj = {
indeksCard : indeksCard,
cards : cards,
IdBoard: IdBoard
}
IdBoard是我想要更新的ID的ID,卡是我想要更新的数组,而indeksCard是列表中的数字位置卡数组。
所以看起来像卡片似乎:
{
"name" : "3",
"Author" : ["59df60fb6fad6224f4f9f22d"]
}
好的,我发送到API,我的功能是:
router.post('/add/author', function (req, res, next) {
var query = 'lists.'+req.body.cardsObj.indeksCard+'.cards';
Board.findOneAndUpdate({ _id: req.body.cardsObj.IdBoard },
{
$set: {
query: req.body.cardsObj.cards,
}
},
{
upsert: true
},
((cards) => {
res.send(cards)
})
)
});
请有人帮助我,这对我来说非常重要。 问题是这个函数Board.findOneAndUpdate没有更新我的数组我觉得它的错误查询。
答案 0 :(得分:0)
Mongodb将您的变量query
作为Board
集合架构中的属性('查询'作为另一个字段)。它无法评估query
变量以提供您想要的数组属性。
要允许MongoDB评估变量,可以在查询变量周围使用[]。这被称为ComputedPropertyName
,在ES6中定义。
试试这个:
Board.findOneAndUpdate({ _id: req.body.cardsObj.IdBoard },
{
$set: {
[query]: req.body.cardsObj.cards,
}
},
{
upsert: true
},
((cards) => {
res.send(cards)
})
)
});
查看here以获取有关ComputedPropertyName的详细信息。