从 Mongoose Find() 查询向对象数组添加属性 [重复]
Posted
技术标签:
【中文标题】从 Mongoose Find() 查询向对象数组添加属性 [重复]【英文标题】:Add a Property to an Array of Objects from a Mongoose Find() query [duplicate] 【发布时间】:2019-05-16 03:43:40 【问题描述】:我正在从 Mongoose 查询中返回一组文档对象。该数组填充了预期的结果。
[
_id: 1,
name: 'Mayonnaise'
,
_id: 2,
name: 'Gravy'
]
我正在尝试仅在满足条件的情况下向某些对象添加新属性。我已经测试了这个元素,条件逻辑也按预期执行。我遍历上面的数组和另一个更大的数组来查找匹配的 id。当找到匹配项时,我需要添加一个属性,例如:
isArchived: true
到 find() 查询返回的数组中的对象。所以我最终应该是:
[
_id: 1,
name: 'Mayonnaise'
,
_id: 2,
name: 'Gravy',
isArchived: true
]
问题是,无论我尝试什么,我都无法将新属性添加到数组中的特定对象上。
我在这里尝试了几乎所有“向对象添加属性”的答案,所以我准备开始扔东西了!!
感谢您的所有帮助!
编辑:整个路由器代码如下:
router.get('/edit/:id', ensureAuthenticated, (req, res) =>
Menu.findOne( _id: req.params.id )
.populate('recipes')
.then(menu =>
Recipe.find(user: req.user.id, function (err, allRecipes)
if(menu.user != req.user.id)
req.flash('error_msg', 'Not Authorised!');
res.redirect('/menus');
else
//use momentjs to format dates to YYYY-MM-DD
const vFromDate = moment(menu.validFrom).format('YYYY-DD-MM');
const vToDate = moment(menu.validTo).format('YYYY-DD-MM');
const selectedRecipeIds = menu.recipes.map(id => id._id);
for (var i = 0; i < allRecipes.length; i++)
for (var j = 0; j < selectedRecipeIds.length; j++)
if (JSON.stringify(allRecipes[i]._id) == JSON.stringify(selectedRecipeIds[j]._id))
allRecipes[i].isSelected = true
res.render('menus/edit',
menu,
vFromDate,
vToDate,
allRecipes
);
);
)
);
【问题讨论】:
【参考方案1】:a = [
_id: 1,
name: 'Mayonnaise'
,
_id: 2,
name: 'Gravy'
]
a[0].isArchived = true
【讨论】:
感谢@mat 的回复,但恐怕没有喜悦。当我 console.log 整个数组时,它坚决不变!【参考方案2】:我认为您正在尝试改变来自响应的原始对象。 尝试对副本进行操作,如下所示:
const allRecipiesCopy = [...allRecipies]
然后循环遍历这个数组,并改变这些对象,而不是原始对象。
【讨论】:
谢谢@Tomasz,但恐怕没有运气。结果和以前一样。 请在allRecipes[i].isSelected = true
旁边放一个console.log
,看看它是否在if
语句中
是的,确实如此。
在allRecipes[i].isSelected = true
之后放一个console.log(allRecipes[i])
并告诉我们输出结果以上是关于从 Mongoose Find() 查询向对象数组添加属性 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
查看单个文档的数组时,mongoose .find() 没有结果
未找到结果时如何从 Mongoose Find 查询返回自定义消息而不是空数组