问题标签 [mgo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
optimization - MongoDB - mgo 库 (Golang) - 多个插入/更新
Collection 结构中是否有一种方法可以像使用Insert 方法一样对多个文档使用Upsert方法?我想一次插入/更新许多文档以进行优化。查看 mgo API http://godoc.org/labix.org/v2/mgo我没有找到办法。
mongodb - 无法使用带有 golang 的 mgo 检索“_id”值
这是我的结构定义:
这是我从数据库中获取数据的方法:
这是存储在数据库中的一个对象:
这是打印结果:
似乎我无法获得_id
field 的真正价值,它总是""
. 有什么问题?
mongodb - 使用 mgo 存储嵌套结构
我正在尝试从高度嵌套的 go 结构构建一个 mongo 文档,并且我遇到了从 go 结构到 mongo 对象的转换问题。我在这里构建了一个非常简化的版本:http ://play.golang.org/p/yPZW88deOa
运行它会产生以下输出:
这是完全有道理的。func (*Collection) Upsert
似乎 Write 函数或 json.Marshal 函数具有一些折叠嵌套结构的功能,但是当我尝试使用 mgo 函数(http://godoc.org/labix)将此数据插入 mongo 数据库时,我的问题就出现了.org/v2/mgo#Collection.Upsert)。如果我json.Marshal()
首先使用该函数并将字节传递给collection.Upsert()
,它将以二进制形式存储,这是我不想要的,但如果我使用collection.Upsert(bson.M("_id": id, &c)
它,它会显示为具有以下形式的嵌套结构:
但是我想要做的是对 mongo 进行更新,其结构与我使用该os.Stdout.Write()
函数时得到的相同:
我是否缺少一些可以轻松处理此问题的标志?在这一点上我能看到的唯一选择是通过删除结构的嵌套来严重降低代码的可读性,我真的很讨厌这样做。同样,我的实际代码比这个例子复杂得多,所以如果我可以通过保持嵌套来避免使其更加复杂,那肯定会更好。
mongodb - MGO - empty results returned from Mongo that has results
I have a GOLANG struct as follows:
I've created and successfully inserted records into a MongoDB collection (as I can see the results by querying Mongo with the CLI mongo program) - but when I query with MGO as follows, I get nothing:
The results printed are:
Result: | Result: | Result: | Result: |
If I ask for the count for records, I get the correct number, but all values for all fields are blank. Not sure what I'm missing here.
go - 在 mgo 结构中重置 time.Time
简化结构:
现在成功(密码)重置它应该设置ResetToken =“”并将ResetSent设置为“未初始化”又名0或初始值或空,你命名它。
在字符串的情况下,它是用 "" 和 ",omitempty" 来完成的,但是我该如何处理 time.Time?
go - 内存不足的致命错误
所以我在 go 中编写了一个守护进程来处理大约 80 万个文档,但我遇到了内存不足的问题。
从我从 mongodb 获取文档时看到的情况来看,每次循环都会增加内存使用量。
另一个功能是:
我不知道它是否在每个循环中重新声明数组或究竟发生了什么。
任何帮助将不胜感激。
mongodb - Golang / MGO - 恐慌:没有可访问的服务器
我有以下连接到 Mongo 的功能。为了测试,我关闭了 mongod,并希望允许程序在不可用的情况下继续 w/0 mongo。好像MGO服务器连接不上的时候会抛出panic,所以我在下面写了一个defer/recover,但是panic还是会导致程序退出。从中恢复的正确方法是什么?
ruby - 如何处理从 mongo 返回的任意散列(使用 mgo)?
假设每个返回的记录具有相同的模式,我可以找到的所有引用都构造了一个结构来保存返回值。如果它们真的是文档并且除了一些可查询的一致元数据属性之外没有一致的模式,我该如何处理该返回值?
例如:此https://groups.google.com/forum/#!msg/mgo-users/KirqfCSlKFc/t2l3l4yxFRwJ假设您有一组时间戳。如果它是一个数组,其中一些值是时间戳,一些是字符串怎么办?
在 ruby 中,我只是将整个返回的记录视为任意散列并逐个键处理它。我可以用它做什么?
mongodb - 使用 mgo 更新分片 MongoDB 错误“完整的分片键必须在更新对象中以进行集合:...”
使用 MongoDB 的Labix mgo API,我正在尝试对分片集合执行增量操作。我可以使用通常的 mgo.Change 结构在非分片集合上执行此操作,但是当我尝试在分片集合上执行此操作时,出现错误:full shard key must be in update object for collection: db_name.collection_name
适用于非分片集合的原始代码如下所示:
但是,当我切换到分片集合时,在键上分片时{ci: 1, dt: 1, zi: 1}
出现上述错误。
为了调试,我试图用 mgo 弄清楚幕后发生了什么,并试图直接插入 mongo 终端。
但是,这给了我一个单独的错误:Can't modify shard key's value. field: ci: "16326" collection: db.collection
这是我认为一旦我弄清楚我的初始错误就必须弄清楚的事情,但对我来说似乎很奇怪,它使用 $setOnInsert 命令抛出了这个错误,因为它不应该修改值,只需在初始插入时设置它。当我删除命令的 $setOnInsert 部分时,所有错误都会消失,但我需要一种方法来确保这些值被设置,因为它们在我编写的查询中很重要,以获取数据。
回到我的主要问题:我确实发现当我在与 MongoDB 终端交互时重新排列更新和 upsert 文档的顺序时,我在通过 mgo 时遇到了错误,所以我试图非常严格地控制通过切换到 bson.D 在 mgo.Change 结构中传递的文档的顺序:
此时,打印更改对象会产生:[{Update [{$setOnInsert [{_id 11635_2013-12-11} {ci 3599} {dt 2013-12-11} {zi 11635}]} {$inc 0xc21dd9d8d0}]} {Upsert true}]
我相信这正是我应该根据Mongo 的文档以正确的顺序作为更改对象传递的内容,但我仍然得到相同的full shard key must be in update object for collection: db.collection
错误。
我意识到 usingcollection.Find({_id: ... }).Apply(change, ...)
是一种可能的替代方法,并且当我使用它时它可以正常工作,但是在我对非分片集合的测试中,我已经看到使用 Upsert(或更新)功能和速度绝对是一个优先事项,因为我每秒要处理数万个事件。
我已经到了这样的地步,我觉得我已经尝试了我能想到的每一个想法,并且希望有一双新的眼睛试图帮助我弄清楚正在发生的事情,所以任何帮助都将不胜感激。