【问题标题】:MongoDB Object key with ES6 template string带有 ES6 模板字符串的 MongoDB 对象键
【发布时间】:2015-06-22 05:24:35
【问题描述】:

我正在尝试用这个来更新我的集合中的一个数组:

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

如果我这样做,这个确切的字符串就可以正常工作:

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

这是为了表明它有效,但是当我使用第一个解决方案时它会抛出错误Unexpected token

我的问题是,我怎样才能让顶级解决方案充当对象键?

【问题讨论】:

    标签: javascript mongodb ecmascript-6


    【解决方案1】:

    模板字面量不能用作对象字面量中的键。改用计算属性:

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

    另见Using a variable for a key in a JavaScript object literal

    【讨论】:

    • 这不起作用。它给出:SyntaxError: Unexpected token [。我怀疑 mongo 不支持这种语法。 (使用版本 2.6.11)
    • @hackel:这与 MongoDB 无关,而是与您使用的 Node 版本有关。请参阅node.green,了解每个版本支持哪些功能。
    【解决方案2】:

    在更新中使用之前以字符串为键创建更新文档:

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

    【讨论】:

    • 非常感谢,这在我几乎放弃后对我有用,var Now = new Date(); var currMonth = Now.getMonth(); var currYear = Now.getFullYear(); console.log(currYear, currMonth); var query = {shareId: share}, inc = { "$inc": {} };公司["$inc"][interactions.views.${currYear}.${currMonth}] = 1 ; ShareStat.findOneAndUpdate(query, inc);
    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 2019-02-25
    • 2016-09-19
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多