2017-10-14 81 views
0

我无法通过api更新阵列卡。我有doc板:更新mongodb和nodejs中的嵌套数组

 { 
"_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 } 

创建功能被sended可变对象,具有:

cardsObj = { 
    indeksCard : indeksCard, 
    cards : cards, 
    IdBoard: IdBoard 
} 

IdBoard是ID其局我想更新,卡它是数组,我想只更新和indeksCard列表中的数字位置卡阵列。

所以cardsObj.cards看来:

 { 
      "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

Mongodb将您的变量query作为Board集合架构中的属性('查询'作为另一个字段)。它无法评估query变量为您提供所需的数组属性。

要允许MongoDB评估变量,可以在查询变量周围使用[]。这被称为ComputedPropertyName,在ES6中定义。

试试这个:对ComputedPropertyName详细信息

Board.findOneAndUpdate({ _id: req.body.cardsObj.IdBoard }, 
    { 
     $set: { 
     [query]: req.body.cardsObj.cards, 
     } 
    }, 
    { 
     upsert: true 
    }, 
    ((cards) => { 
     res.send(cards) 
    }) 
) 
}); 

here