2017-10-14 12 views
0

apiで配列カードを更新できません。mongodbとnodejsのネストされた配列を更新する

で変数オブジェクトをsendedではれる私は関数を作成
 { 
"_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 } 

::私はDOCボード持って

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

IdBoardは私が更新をしたいボードID、カードがあるが、それは私が唯一の更新をしたい配列で、indeksCardリスト内の数字の位置のカードの配列です。

ので、それはそうcardsObj.cards:OK

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

queryは、Boardコレクションスキーマの変数(別のフィールドとして 'クエリ')として使用されています。 query変数を評価して、必要な配列プロパティを得ることはできません。

MongoDBが変数を評価できるようにするには、クエリ変数の周りに[]を使用できます。これは、ES6で定義されたComputedPropertyNameとして知られています。

これを試してみてください:ComputedPropertyNameの詳細については、

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

ルックhereを。

関連する問題