草庐IT

Update-Upsert

全部标签

ruby-on-rails - 当有自定义 _id 时,mongo-ruby-driver 不会在 upsert 上创建新文档

我想用mongo-ruby-driver使用类似下面的东西来更新一个文档-id="#{params[:id]}:#{Time.now.strftime("%y%m%d")}"#db.collection('metrics').insert({'_id'=>id})db.collection('metrics').update({'_id'=>id},{'$inc'=>{"hits"=>1}},{'upsert'=>true})现在这只会更新现有文档,如果不存在则不会创建文档。执行这两个操作的唯一方法是取消注释上面的insert()命令。如果我使用mongo控制台并尝试直接执行此更新插入

ruby-on-rails - update_attributes 始终返回 true,即使 nested_attributes 无效

我有2个带有嵌套数据的模型:classGoodtenderincludeMongoid::DocumentincludeMongoid::Timestampsfield:namefield:countreferences_many(:offerprices,:autosave=>true)accepts_nested_attributes_for:offerprices,:allow_destroy=>true,:reject_if=>:all_blankvalidates_presence_of:name,:message=>"Invalid"validates_numericali

java - 带有 $in 和 upsert 的 MongoDB UpdateMany

名为persons1的Mongo集合包含以下数据:db.persons1.find().pretty();{"_id":"Sims","count":32}{"_id":"Autumn","count":35}{"_id":"Becker","count":35}{"_id":"Cecile","count":40}{"_id":"Poole","count":32}{"_id":"Nanette","count":31}现在通过Java我已经编写了代码来增加列表中存在的用户的计数MongoClientmongoclient=newMongoClient("localhost",270

java - Spring Boot Mongo Upsert 数组中的元素

想了解如何在MongoDB中对给定文档执行数组更新插入操作。我有以下json文件{"firstName":"John","lastName":"Paul","contact":{"contactGroup":"Business","myContacts":[{"name":"Jeff","phone":"222-572-8754"},{"name":"Joe","phone":"456-875-4521"}]}}我想在以下级别执行更新插入操作:名字我的联系人数组下面是我处理过的代码片段。目前,我正在为myContacts使用MongoDB的addtoSet运算符,但行为似乎只执行向数组

ruby-on-rails - mongoid update_attributes 改变数据类型

我正在创建一个简单的Rails应用程序来修改现有mongo数据库中的数据。我正在使用mongoid进行交互,并且可以很好地读取/销毁对象。问题是我的mongo文档有一个“节点”,它是一堆键值对,根据记录的不同而有所不同。当我像这样加载记录时:MongoObject.find(BSON::ObjectId('ABC1234567890'))=>#11,"id"=>"logIns"}>我正在使用标准Rails表单来更新值,因此发布数据如下所示:{"commit"=>"Edit","utf8"=>"✓","id"=>"ABC1234567890","mongo_object"=>{"node

performance - "nscanned"查询上的 "update"值非常高 - 似乎高于所有索引中所有条目的总和

我在偶尔的更新查询中得到非常高的“nscanned”数字,而“nscannedObjects”相对较低。我从mongodb日志中获取这些数字,作为慢速查询自动记录的一部分(这些更新需要100毫秒到500毫秒之间的任何时间)。更新后的集合有198K个项目,大小刚刚超过100MB。它有许多不同的字段(超过30个),以及这些字段及其组合的31个索引。这是来自MongoDB.log的完整条目-包括查询和结果:2014-09-22T11:55:22.507+0000[conn45755]updatemydatabase.mycollectionquery:{_id:ObjectId('53d13

node.js - 如何在 Mongoose 的 upsert 操作中设置更新时间戳?

我只想在upsert操作中为更新记录(并为新记录插入时间戳)设置更新时间戳。self.model.update({Id:obj.Id},obj,{upsert:true},function(err){if(err){return;}//...});有什么办法可以解决这个问题吗?有一个pre.save中间件我也许可以使用,但是有什么方法可以判断当前操作是插入还是更新?提前致谢! 最佳答案 你不能自动完成。您可以在更新插入时使用$set:{timestamp:Date.now()}来做到这一点。mongoosebugtracker中有一

javascript - Mongoose 4.x "model.update()"回调已更改

在mongoose4.x之前,在update()中,您可以检查回调中的第二个参数以查看是否找到了文档。在下面的示例中,您可以使用“rowAffected”来查看是否存在用户名为john的文档。model.update({username:"john"},{...},function(err,rowAffected){if(rowAffected)//documentfound但是现在从mongoose4.x开始,回调中的第二个参数成为MongoDB更新操作的原始输出。所以要查找文档是否存在,我必须执行raw.nmodel.update({username:"john"},{...},f

MongoDB : update entire document except _id using C# driver

我必须更新除_id之外的所有字段。我想避免手动更新16个字段...所有新字段都存储在BsonDocument中谢谢你的想法 最佳答案 正如@Philipp所暗示的那样,有一种方法可以做到这一点。您实际上可以使用save函数(http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-Save%3CTDocument%3Emethod),它将在数据库端为您执行他所说的操作。假设您有一份文档:{_id:{},d:1}而那个_id已经存在了

MongoDB 外壳 : check if update succeeded

类似于MongoDBupdate:howtocheckifanupdatesucceedsorfails?但对于默认的mongodbshell。db.collection.update()将在两种情况下静默执行:查询找到文档时和未找到文档时。两次更新后getLastError也为null。如何在不重新查询集合的情况下发现某些内容确实已更新?我在Ubuntu12.04上使用MongoDB版本2.0.4 最佳答案 db.getLastErrorObj()是您要调用以获取更新结果的内容。它返回一个如下所示的对象:{"updatedExis