admin管理员组

文章数量:1334673

I'm trying to update an array in my collection with this:

 var str = "list.0.arr";
    db.collection('connect').update({_id: id}, {$push:  { `${str}`: item}}); 

This exact string works just fine if I do it like this:

db.collection('connect').update({_id: id}, {$push:  { "list.0.arr": item}}); 

This is to show that it works, but It's throwing an error Unexpected token when I use the first solution.

My question is, how can I get the top solution to work as the Object key?

I'm trying to update an array in my collection with this:

 var str = "list.0.arr";
    db.collection('connect').update({_id: id}, {$push:  { `${str}`: item}}); 

This exact string works just fine if I do it like this:

db.collection('connect').update({_id: id}, {$push:  { "list.0.arr": item}}); 

This is to show that it works, but It's throwing an error Unexpected token when I use the first solution.

My question is, how can I get the top solution to work as the Object key?

Share Improve this question asked Jun 21, 2015 at 21:12 Ajax jQueryAjax jQuery 3452 gold badges5 silver badges19 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 6

Template literals cannot be used as key in an object literal. Use a puted property instead:

db.collection('connect').update({_id: id}, {$push: {[str]: item}}); 
//                                                  ^^^^^

See also Using a variable for a key in a JavaScript object literal

Create the update document with the string as key prior to using it in the update:

var str = "list.0.arr",
    query = { "_id": id },
    update = { "$push": {} };
update["$push"][str] = item;
db.collection('connect').update(query, update); 

本文标签: javascriptMongoDB Object key with ES6 template stringStack Overflow