mongodb创建记录时使用Object数据的问题 10C

背景:nodejs程序中,使用语句RecInfo.create({msg:json,msgType:'xx',time:'xxxxx'});向数据库插入一条记录
msgType和time没有问题,msg原型为Object.
条件:该语句会被高频使用,所以其后续操作没有写在create的回调函数里,且后续对json内容做了修改
现象:存入库中的数据包含了后续修改的内容
疑惑:按本渣之前的理解,程序运行到create后,其中的内容就已经固定下来,后续修改不会影响到存入的数据。但是若要对该现象作出解释,似乎只能是create会在实际向库中写入数据时访问json的地址来获取数据,所以会写入后续内容。
问题:上面的解释是否合理,该如何解释这个现象,mongo的create原理如何?

0

2个回答

可以尝试将“json”变量的内容转换成字符串格式,然后再用create方法测试一下,如果修改了json的内容,而后续插入数据库中的记录中msg的内容没有改变的话,
那么就表示json可能是被引用了内存地址,而非实际的值。

0
buaazhangboyu
老鱼几点了 使用这个方法测试过,string格式下数据库内容正常。想知道create底层如何实现的
10 个月之前 回复

应该是对Object等做了序列号处理或其他方式,再写入db,这里就可能存在数据引用等

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MongoDB中如何插入带有点“.”的记录
MongoDB默认是不允许出现带有“.”的键或值的,因为MongoDB的嵌套查询依靠“.”来实现解决此问题有两种方法:1.在MongoDB2.7等老版本中,会有check_keys=False,就会忽略“.”来插入数据库,这种方法在新版本中被废弃掉了collection.insert(document,check_keys=False)2.将出现“.”的位置用其他字符来代替...
MongoDB的ObjectId的序列化问题
MongoDB在不特殊指认的情况下,默认的集合主键是“_id”,类型是ObjectId。ObjectId是一个12字节的BSON类型字符串,包含了UNIX时间戳,机器识别码,进程号,计数值信息。机器码用来防止分布式系统生成id时冲突的问题,保证每台机器生成的识别码不同,进程号保证多线程情况下生成的id不同。
mongo-java-driver-3 记录存在则更新,不存在创建
void upsert(MongoCollection<Document> collection,Bson filter,Bson update) { collection.updateOne(filter,new Document("$set",update),new UpdateOptions().upsert(true)); } 详见[http://stackoverf
mongoDB脚本中对于文档的创建更新以及删除操作
mongodb由C++写就,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理。关于它的一个最简洁描述为:scalable, high-performance, open source, schema-free, document-oriented database。MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统(...
python操作mongoDB的时候遇到问题,find()结果无法保存
最近使用python操作mongoDB的时候遇到点问题,各种纠结呀,分享给大家。 使用的是pymongo库 先上代码: conn = pymongo.MongoClient("121.42.61.85", 27017) db = conn.dota2_database collection = db.World_Cyber_Arena_2015 data2 = collection.find
php + mongodb 百万级记录批量remove异常问题
在对php+mongodb进行性能测的过程中发现一个问题,mongodb的insert,update,remove等函数有一个默认的30秒超时问题 如: $coll->remove(); 试图使用上面的语句清空coll中的所以记录是,你会发现若果在上面语句的后面加一句: $count = $coll->count(); 后面这条语句就会触发一个30秒超时的异常,结果研究我发现其实是rem
MongoDB常用命令汇总之插入、更新和删除操作详解。
MongoDB常用命令汇总之插入、更新和删除操作详解。
MongoDB更新文档 [四]
MongoDB更新文档 转载请出自出处:http://eksliang.iteye.com/blog/2174104 MongoDB对文档的CURD,前面的博客简单介绍了,但是对文档更新篇幅比较大,所以这里单独拿出来。 语法结构如下: db.collection.update( criteria, objNew, upsert, multi) 参数含义 参数    含义 ...
MongoDB的基本操作:删除记录(删)
方法 删除记录有两个方法: - db.collection.deleteMany() //删除匹配条件的多条记录 - db.collection.deleteOne() //删除匹配条件的单条记录 括号里面的参数是查询过滤器。 查询过滤器: 查询过滤器用来设定查询条件。 格式&amp;amp;amp;lt;field&amp;amp;amp;gt;:&amp;amp;amp;lt;value&amp;amp;amp;gt;。 { &amp;amp;amp;lt;field1&amp;a
MongoDB_记录条数limit和跳过条数skip
'use strict'; // connect MongoDB var mongodb = require("mongodb"); var server = new mongodb.Server("127.0.0.1", 27017, {auto_reconnect:true}); var client = new mongodb.Db("testDB", server, {w:1}); c
关于MongoDB中如何做到对已有数据插入时更新字段,不存在时则插入新的Document
背景需求: * 比如我们有这样一个需求,有两个excel中的数据,需要插入到数据库中,这个两个excel中的数据有些字段都是一样的,比如本例所写的,电台名称是一样的,省市县也是一样的,而不一样的是波段是调频(FM) 调幅(AM). * ` 这里普及一下:AM 调幅,中波 FM 调频,微波 代表广播电台发射信号使用的技术和接收设备(收音机)接受的制式. 微波传输,信号质量高,传输成本低
Python无法连接mongodb数据库,Connection方法不存在
在这周学习python tornado的过程中,接触了新的数据库mongo. 在刚开始连接的过程中,就出现了如下的问题,特此记录一下。 AttributeError: 'module' object has no attribute 'Connection'   python版本2.7.11 pymongo版本3.3.0 根据网上的教程,首先导入pymongo,连接第一步的步骤大都
MongoDB经验教训:一次批量删除历史数据引发的悲剧
以下是引用同事分享经验 MongoDB经验教训:一次批量删除历史数据引发的悲剧 缘起:mongodb数据量过大,准备删除mongodb无用历史数据 => 我们分了32张表,实施过程中逐表删除 经过: 4:00左右:  开始跑脚本删除数据,偶有报警,不影响服务; 9:00左右:  流量上行,数据库请求排队,MongoDB逐步扛不住了;             DBA尝试重启
Spring Data 与MongoDB 集成二:操作篇(添加和删除)
一、简介 spring-data-mongodb项目提供与mongdb文档数据库的集成,spring-data-mongodb提供了org.springframework.data.mongodb.core.MongoTemplate对mongdb的CRUD操作,包括对集成的对象映射文件和POJO之间的CRUD的操作。 二、MongDB文档数据库:添加 spring-data
mongodb数据条目过期设置
Mongodb自带时间过期删除的机制,其机制主要是使用Time To Live(TTL) 索引实现的 注意:以下集中情况是无法使用TTL索引的 (1)TTL索引是单字段索引,混合索引不支持TTL,并且也会忽略expireAfterSeconds属性 (2)在_id 主键上不能建立TTL索引 (3)在capped collection中不能建立TTL索引,因为MongoDB不能从capped co...
mongodb 随机获取一条记录的方法
本文介绍php7.0以上使用mongdb的基本方法,并提供mongodb随机获取一条记录的测试实例。
Java项目简单操作MongoDB数据库
Java项目简单操作MongoDB数据库 01)新建Maven项目[NewMongo] 02)pom.xml配置 4.0.0 com.tcc.tcc NewMongo 0.0.1-SNAPSHOT org.mongodb bson 3.6.1 org.mongodb mongo-ja
mongodb 集合创建、集合数据添加和集合删除
Mongodb 数据库创建集合主要使用的指令为:db.createCollection()函数,相关函数说明,请参考其他文献资料。 如下: 选择在指定的数据库中创建集合。 -- show dbs ; 查询当前mongodb 所包含的数据库实列。 --use mydb; 使用指定当前名称的”数据库“,如果指定数据库不存在,则mongodb 会创建一个指定名称的数据库。
python 使用mongodb的方法总结
Mongodb 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON)。 Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接。 1.创建数据库 创建数据库需要使用 MongoClient 对象,并且指定连接的 URL 地址和要创建的数据库名。 具体的函数为:pymongo.MongoClient() ...
MongoDB查询时的卡顿与内存问题
这两天从Remote MongoDB读数据的时候遇到了一个很奇葩的问题,就是使用DBCursor读数据的时候每六千多条就卡顿很久,这个六千多是一个固定的数。然后是58w的数据每次到20w putty终端就会卡死,然后MongoDB也会退出。虽然到现在问题还没解决,但是先把资料做一下汇总,看能不能有所帮助。阿里云服务器只有1G内存,但是数据大概也只有320M。首先从这个链接http://huoding
Django mongoDB 主键ID 随机唯一标识码
Django 连接 MongoDB 使用 mongoengine  使用mongoengine ,django里面的 Model 就失效了,改用 Document 随机唯一标识码采用当前时间的微秒 from mongoengine import * from datetime import datetime connect('test') class Info(Document): ...
nodejs读取mongodb返回数据到前台页面[object object]异常处理
第二步中的尤为重要,不然会出现不可预见的错误,如非法字符‘_’或者非法字符'o'等异常
Python操作mongo生成一千万条数据
emm。。。测试用的。 在centos7环境下使用python操作mongo在一个collection下生成一千万条数据,并记录开始和结束时间。 脚本如下: import time from pymongo import MongoClient nowtime = time.strftime(&quot;%Y-%m-%d %H:%M:%S&quot;,time.localtime(time.time())) ...
MongoDB固定集合的使用(基于Ruby)-记录用户日志行为
MongoDB中的固定集合原本是针对高性能日志场景设计的。它们与标准集合的区别在于其大小是固定的。也就是说,一旦固定集合到达容量上限,后续的插入会覆盖集合中最先插入的文档。在只有最近的数据才有价值的情况下,这种设计免除了用户手工清理集合的烦恼。本博文介绍了固定集合的使用方式和操作方法。
爬虫之MongoDB存储(中)
一 点睛 我们可以利用find_one()或find()方法进行查询,其中find_one()查询得到的是单个结果,find()则返回一个生成器对象。 二 实战——一般查询 1 代码 import pymongo # 一般来说,传入MongoDB的IP及端口即可,其中第一个参数为地址host, # 第二个参数为端口port(如果不给它传递参数,默认是27017) client = pym...
mongodb使用ExampleMatcher遇到的坑记录下
今天在使用如下查询方式时遇到一个坑 实体类必须使用mongdb里面的才能查询
java操作mongodb 保存的小问题
用MongoRepository保存操作 发现有 insert 和 save, 简单查了一下 insert 遇到主键相同的情况下会报错, save会覆盖 随便用一个 保存一系列数据的时候, 发现多了一列 _class, 是底层的 DefaultMongoTypeMapper 自动建的, 把它设置为null就好了 另外 mongo里面的 arry document等等一些字段 直接映射到java...
MongoDB:count 结果不准确的原因与解决方法
教训:MongoDB 在分片后的集合上进行 db.collection.count() 操作时,出现结果不准确的现象,需要采用聚合的方法获取集合的 count 结果 插入数据后,使用 Studio 3T 查看数据量时,发现显示的 count 结果与插入的数据不一致,偶然会多出几条或十几条 通过谷歌发现,官方文档——( https://docs.mongodb.com/manual/refere...
MongoDB学习笔记:创建数据集合
官网地址:https://docs.mongodb.com/manual/reference/method/db.createCollection/#db.createCollection。 这节有点混乱,也有点尴尬,因为原本MongoDB就有些“没有规矩”。 快速创建一个集合,参考插入这一节。 集合不存在的情况下,插入一条记录就会创建集合。 稍微啰嗦一点,如下: db.test.i...
我在MongoDB使用中遇到的几个问题
1.MongoDB主键_id 在我一开始接触MongoDB的时候我觉得无论是什么数据库都是有主键的,而且可以自定义,直到遇到了MongoDB。没有人会喜欢被强制使用“_id”这样的主键名称,MongoBlog上面是这样说的: blog.mongodb.org:Every document stored in MongoDB must have an "_id" key, and you c
MongoDB中ObjectId的误区,以及引起的一系列问题
近期对两个应用进行改造,在上线过程中出现一系列问题(其中一部分是由于ObjectId误区导致的) 先来了解下ObjectId:
Mybatis拦截器实现记录历史数据到MongoDB
背景需求 项目中使用的持久层框架Mybatis,我们使用MongoDB记录所有的更新历史记录,方便项目出问题时便于分析。将所有的数据的更新,即新增修改删除的记录,都记录在MongoDB中,可以通过RockMongo这个工具查找。 实现 自己写了一个拦截器,用于拦截Executor执行器的Update方法。通过解析参数,在目标方法即Update方法执行前后对数据进行处理,最终将数据记录到Mon...
.net MVC中实现MongoDB按照 _id 值删除单条记录
[HttpPost] public JsonResult DeleteAdminLog(string id = "") { var filter = Builders.Filter.Eq("_id", new ObjectId(id)); var collection = DBHelper.GetCollection(
关于mongodb查询数据,数值类型查找不到数据的问题
数据库中数据如下: 查询条件: { "name":"ggod", "$or":[{"age":15},{"age":27}] } 则可查出两条数据。 如果查询条件为: { "name":"ggod", "$or":[{"age":"15"},{"age":"27"}] } 则将查询不到数据。 原因是:查询的时候严格按照数据类型来查找。age为整数形,而
学习MongoDB 七: MongoDB索引(索引基本操作)(一)
在MongoDB建立索引能提高查询效率,只需要扫描索引只存储的这个集合的一小部分,并只把这小部分加载到内存中,效率大大的提高,如果没有建立索引,在查询时,MongoDB必须执行全表扫描,在数据量大时,效率差别就很明显,对于包括一个没有索引的排序操作的查询,服务器必须在返回任何结果之前将所有的文档加载到内存中来进行排序。 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。索引项的排序支持高效的相等匹配和基于范围的查询操作。
mongodb update,根据条件修改一条或多条记录
mongodb update 的用法: db.table_name.update(where,setNew,issert,multi ); 参数解释: where:类似于sql中的update 语句where后边的查询条件 setNew:类似于sql中update语句中set后边的部分,也就是你要更新的部分 upsert:如果要更新的那条记录没有找到,是否插入一条...
MongoDB之——基于Shell命令行操作记录
转载请注明出处:https://blog.csdn.net/l1028386804/article/details/79982083一、插入记录下面我们来建立一个 test 的集合并写入一些数据. 建立两个对象 j 和 t , 并保存到集合中去.在例子里 “&amp;gt;” 来表示是 shell 输入提示符&amp;gt; j = { name : &quot;mongo&quot; }; {&quot;name&quot; : &quot;mongo&quot;} &amp;...
mongoDB简单的数据库创建,文档的增删改,常用命令(二)
常用命令&amp;gt; show dbs    -- 查看数据库列表&amp;gt; use admin   --创建admin数据库,如果存在admin数据库则使用admin数据库&amp;gt; db   ---显示当前使用的数据库名称&amp;gt; db.getName()  ---显示当前使用的数据库名称&amp;gt; db.dropDatabase()  --删当前使用的数据库&amp;gt; db.repairDatabase...
插入大量数据至MongoDB数据库的速度问题分析
插入大量数据至MongoDB数据库的速度问题分析 需求背景:某定时任务产生千条或更多JSON数据,本次数据还未完全写入数据库中,下一次定时任务的数据已经产生,由此而产生的数据拥堵怎么解决? 最初使用SpringBoot对MongoDB数据库做数据插入操作时,使用的是MongoTemplate中的save方法完成数据存储操作。 具体代码实现如下: JS
MongoDB中固定集合及游标使用
mongo中可以创建大小固定集合,称之为固定集合,固定集合的性能出色,适用于很多场景比如:日志处理   临时缓存特点:  插入速度快         顺序查询速度快        能够讨淘汰早期数据        可以控制集合空间创建:db.createCollection(collectionName,{capped:true,size:10000,max:1000})size : 设置固定集合...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习python时遇到的问题 mongodb教程python