【问题标题】:Updating a specific element in an array with MongoDB / Meteor使用 MongoDB / Meteor 更新数组中的特定元素
【发布时间】:2014-03-21 20:15:16
【问题描述】:
"users_voted" : [ 
    {
        "user_id" : "AQG8ECLdBRJ4jwPMG",
        "score" : "down"
    }
]

想知道如何更新作为数组对象的users_voted 字段。我需要更新一个特定的对象。我知道该对象所在的index,我只需要弄清楚如何在 MongoDB / Meteor 集合中更新该对象。

这是一些伪代码,我必须更好地解释我的意思。

Posts.update({_id: post_id}, {$set: {vote_score[index]: u_object}});

所以在这个查询中,我知道indexpost_id 以及u_object 是我试图放入数组中的对象,以代替index 中的任何对象。如果有人可以帮助让我知道我应该如何去做,那就太好了。

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    您不能将变量用作对象字面量中的键。试试这个:

    var obj = {};
    obj["users_voted." + index] = u_object;
    Posts.update({_id: post_id}, {$set: obj});
    

    【讨论】:

    • 它不是一个对象。它是一个对象数组。我想更新该数组中的单个对象。我在数组中有那个对象的索引。我应该使用什么查询来更新它?我不想获取整个数组,添加对象然后更新整个数组。
    • 我应该能够使用变量作为数组的索引。同样,我知道我提供的代码可能是错误的(伪代码)。我应该更清楚,对此感到抱歉。
    • 对不起,我认为我的措辞令人困惑 - 我指的是您的伪代码中的密钥:vote_score[index]。我不确定vote_score 是什么(可能是错字)。无论如何,我提供的代码应该将index 指定位置的users_voted 数组更新为u_object 中包含的值。如果这不是你想要的,请告诉我。
    • 这是有效的。谢谢!另外,如果我知道元素的索引,如何从数组中完全删除元素?可能使用$pull?
    • 查看this question 的答案 - 看起来您可以使用$pull,但只能按值(而不是按索引)。所以:Posts.update({_id: post_id}, {$pull: {'users_voted': u_object}});
    猜你喜欢
    • 1970-01-01
    • 2018-09-21
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多