2017-10-14 78 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