根据数组下标在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的格式

原文地址:https://www.cnblogs.com/wuzhiblog/p/mongodb_update_array_by_index.html

时间: 2024-10-14 23:54:50

根据数组下标在MongoDB中修改数组元素的相关文章

在thinkphp框架中使用后台传值过来的数组,在hightcart中使用数组

js的数组是和php里面数组是不一样的,所以模板文件需要先接受,然后利用Js代码转化之后再使用,接受后台的数组有几种办法 1.后台传过来的json数组,利用Js是可以接受的,然后将json数据利用js就可以转化成js数组 2.后台传过来的模板标签可以在json中使用模板引擎标签,然后将标签遍历之后放在js的数组中 var dateArr = [];var countArr=[]<volist name="dateArr" id="date"> dateA

python中修改列表元素的方法

一.在for循环中直接更改列表中元素的值不会起作用: 如: l = list(range(10)[::2]) print (l) for n in l: n = 0 print (l) 运行结果: [0, 2, 4, 6, 8] [0, 2, 4, 6, 8] l中的元素并没有被修改 二.在for循环中更改list值的方法: 1.使用range l = list(range(10)[::2]) print (l) for i in range(len(l)): l[i] = 0 print (l

字典遍历过程中修改字典元素,报错 RuntimeError: dictionary changed size during iteration

https://blog.csdn.net/u013344884/article/details/81867225 原文地址:https://www.cnblogs.com/come202011/p/12432224.html

一起来刷《剑指Offer》——不修改数组找出重复的数字(思路及Python实现)

数组中重复的数字 在上一篇博客中<剑指Offer>-- 题目一:找出数组中重复的数字(Python多种方法实现)中,其实能发现这类题目的关键就是一边遍历数组一边查满足条件的元素. 然后我们在博客用最复杂的方式学会数组(Python实现动态数组)这篇博客中介绍了数组这一结构的本质,并自己动手实现了一个动态数组. 今天我们介绍一下另一道来自<剑指Offer>的关于数组的面试题--不修改数组找出重复的数字. 不修改数组找出重复的数字 题目二:不修改数组找出重复的数字 给定一个长度为 n+

慕课网-安卓工程师初养成-6-5 使用循环操作 Java 中的数组

来源:http://www.imooc.com/code/1531 实际开发中我们经常使用循环控制数组成员的操作.如: 运行结果: 其中,  用于获取数组的长度 需要注意的“小毛病”: 1. 数组下标从 0 开始.因此 scores[3] ,表示数组中的第 4 个元素,而并非第 3 个元素 2. 数组下标的范围是 0 至 数组长度-1 ,如果越界访问,就会报错.如: 运行时会报如下错误: 上面错误信息的意思是数组下标超过范围,即数组访问越界.在上面的代码中创建一个长度为 2 的数组,因此数组下标

Java基础---使用循环操作Java中的数组(三十一)

使用循环操作 Java 中的数组 实际开发中我们经常使用循环控制数组成员的操作.如:  运行结果:  其中,  用于获取数组的长度 需要注意的"小毛病": 1. 数组下标从 0 开始.因此 scores[3] ,表示数组中的第 4 个元素,而并非第 3 个元素 2. 数组下标的范围是 0 至 数组长度-1 ,如果越界访问,就会报错.如: 运行时会报如下错误: 上面错误信息的意思是数组下标超过范围,即数组访问越界.在上面的代码中创建一个长度为 2 的数组,因此数组下标范围是 0 到 1

PHP中的数组(Array)

定义数组的方式: 使用array内置关键字 使用[]定义 直接赋值 <?phpecho '<pre>'; //定义数组的方式////1.使用array内置关键字$arr = array(1,2,4);print_r($arr); //2.使用[]定义$brr = [1,2,4];print_r($brr); //3.直接赋值$crr[] = 1;$crr[] = 2;$crr[] = 4; print_r($crr); $drr[1] = 1;$drr[2] = 2;$drr[3] = 

信奥一本通-树状数组模版题目-修改数列元素+求子数列元素和

给定n个数列,规定有两种操作,一是修改某个元素,二是求子数列[a,b]的连续和.数列的元素个数最多10万个,询问操作最多10万次. 输入 第一行2个整数n,m(n表示输入n个数,m表示有m个操作) 第二行输入n个数列. 接下来m行,每行有三个数k,a,b(k=0表示求子数列[a,b]的和:k=1表示第a个数加b). 输出 输出若干行数字,表示k=0时,对应的子数列[a,b]的连续和. 样例输入 10 5 1 2 3 4 5 6 7 8 9 10 1 1 5 0 1 3 0 4 8 1 7 5 0

JS中的数组、字符串小结

数组:引用/复合数据类型 数组里面可以存储任何的数据类型,例如数组.字符串.数字.布尔值,是一个变量,过程中可以被改变. 数组的存储是分为两个部分:程序运行段和堆 程序运行段(编译之后分配的空间大小不可改变):存储着数组的地址 堆(空间大小可以改变):存储着数组的元素,例如数组.字符串.数字.布尔值 程序运行时是通过程序运行段中存储的数组地址找到堆中对应的元素. var arr3 = [10,20,30]: var arr1 = ["abc", 2,true,arr3]: var ar