根据数组下标在MongoDB中修改数组元素

Posted 青冥绿水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据数组下标在MongoDB中修改数组元素相关的知识,希望对你有一定的参考价值。

如下图这样的数据:

即文档中某个字段是一个数组,而每个数组元素又是一个对象,现在需求是对每个对象中的content字段值作情感分析后,把情感分析得到的结果增加到这个对象中去。
如上图中第1个元素,修改后的结果应该是这样的:

{
    "like_count": 2,
    "pubtime": "Tue Apr 03 09:50:01 +0800 2018",
    "reply_count": 0,
    "content": "掌声送你",
    "sentiment": 0
}

也就是多了最后的那个sentment:0。情感分析的过程是另外的话题,这里只讲mongodb的更新语句。
假设实际中已经获取到了这个文档的url,则更新语句是这样子的:

db.collection.updateOne(
  {"url": url},
  {"$set": {"comments.0.sentiment": 0}},
  {"upsert": true}
)

在python中使用pymongo的语句是这样的:

#
# 这里假设已经获得文档并保存在了doc变量中
#

for idx, comment in enumerate(doc[\'comments\']):
    db.collection.update_one({\'url\': url},
                             {\'$set\': {\'comments.%d.sentiment\' % idx: cmt_sent}},
                             upsert=True)

要注意的是$set后面的\'comments.%d.sentiment\' % idx,其实也就是拼成comments.0.sentiment的格式

以上是关于根据数组下标在MongoDB中修改数组元素的主要内容,如果未能解决你的问题,请参考以下文章

Java定义一个一维数组,并给每个元素赋值为数组下标的值,并显示

wepy根据下标对数组中的某个对象的元素进行赋值

php向数组添加含有下标的元素

Vue.set (修改数组单一下标的值)

Mongodb如何查询内嵌数组的指定元素?

JDK常用数据结构