更新mongodb和nodejs

时间:2017-10-14 17:41:26

标签: arrays node.js mongodb

我无法通过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没有更新我的数组我觉得它的错误查询。

1 个答案:

答案 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的详细信息。