当前位置: 首页 > 知识库问答 >
问题:

将属性添加到从猫鼬查找()查询[重复]的对象数组

谭伟
2023-03-14

我正在从Mongoose查询返回一个文档对象数组。数组中填充了预期的结果。

[{
    _id: 1,
    name: 'Mayonnaise'
},
{
    _id: 2,
    name: 'Gravy'
}]

我试图添加一个新的属性到某些对象,只有在满足一个标准。我已经测试了这个元素,条件逻辑也按预期执行。我在上面的数组和另一个更大的数组中循环查找匹配的id。当找到匹配时,我需要添加一个属性,例如:

{isArchived: true}

指向由fint()查询返回的数组中的对象。所以我应该以:

[{
    _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
        });
      }
    });
  })
});

共有2个答案

仉伟兆
2023-03-14

我想你是在试图改变来自响应的原始对象。尝试对副本进行操作,如下所示:

const allRecipiesCopy = [...allRecipies]

然后在这个数组上循环,改变这些对象,而不是原始对象。

胡玉书
2023-03-14
a = [{
    _id: 1,
    name: 'Mayonnaise'
},
{
    _id: 2,
    name: 'Gravy'
}]

a[0]. isArchived=true

 类似资料:
  • 在开发API时,我经常需要在mongoDb查询结果中设置额外的属性。但是我不能以一种好的方式去做。例如 模型 查询 在这里,在我从mongoDb获得结果之后,我想将breed属性设置为result,但是我不能这样做,因为该属性没有在模式中定义 所以为了设置一个额外的属性,我使用了hack 我不认为这是一个很好的编码方式。请给一个更好的设置属性的方法,并解释黑客是如何工作的。

  • 问题内容: 我有这个电话: 我在哪里指定要返回的属性?在文档中找不到它。以上返回整个对象。我只希望返回一些属性。 这是我的架构: 我不想在我的休息电话中包含项目数组。 问题答案: 您使用投影。猫鼬查询文档中的第一个示例具有投影操作。 注意:不是真正的代码b / c,我用三颗星突出显示了重要的部分 该方案没有规定,但我认为例子是再清楚不过。

  • 我编码一个API与Node.js,MongoDB和快递。我似乎无法向我正在迭代的位置对象添加新属性。 我完全不理解我的代码的问题。是一个普通的对象,它应该可以工作。我说错了吗? 这是我在控制台中得到的输出。。。这太奇怪了。

  • 我可能忽略了最简单的解决方案,但我已经尝试了任何我能想到或在互联网上找到的方法。 我试图添加一个属性到我的JSON对象,我需要在我的输出。但是无论我尝试添加属性,它都不会显示在我的对象中。我验证了'doc'变量是一个实际对象。 没有控制台错误。Console.log()显示doc对象的内容,仅此而已。 有人知道发生了什么吗? blogPost/doc的输出 在浏览器中进行这样的简单测试确实有效。所

  • 问题内容: 我需要在node.js中用猫鼬返回查询的结果。 如何返回值以将值设置为变量? 我需要做的是: 为了有: 非常感谢您的回复 。 我还有另一个问题。 如何使用find或findOne在查询运算符中传递变量?喜欢 : 问题答案: 有几种方法可以实现您想要的。 1.使用猫鼬查询 在这种策略中,您的函数返回一个Mongoose查询,您以后可以使用它来调用该方法并使用它来获取结果。 然后,您可以简

  • 我试图基于同一数据帧的另一行向数据帧添加列。我想查找第一列值等于第5列中的值的行,并将第2、3和4列附加到dataframe,如下所示 我尝试创建另一个表来合并以各种组合,但没有运气。