好吧,我是新手mongo,今天早上我有一个(糟糕的)想法.我正在玩shell中的索引,并决定创建一个包含许多文档(1亿)的大型集合.所以我执行了以下命令:
for (i = 1; i <= 100; i++) {
for (j = 100; j > 0; j--) {
for (k = 1; k <= 100; k++) {
for (l = 100; l > 0; l--) {
db.testIndexes.insert({a:i, b:j, c:k, d:l})
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,事情并没有像我预期的那样:
正如您在下面的照片中看到的那样,随着集合中文档的数量不断增加,文档插入的时间也在增长.我建议通过数据文件的最后修改时间:

这是预期的行为吗?我不认为1亿份简单文件太多了.
PS我现在真的害怕执行ensureIndex命令.
编辑:
我执行了以下命令:
> db.testIndexes.stats()
{
"ns" : "test.testIndexes",
"count" : 100000000,
"size" : 7200000056,
"avgObjSize" : 72.00000056,
"storageSize" : 10830266336,
"numExtents" …Run Code Online (Sandbox Code Playgroud) 我检查了其他类似的帖子,但没有一个适合我的情况。
在连接到MongoDB Atlas之前,我升级了mongo shell,从中创建了一个免费的沙箱数据库。我将以下内容用于我的联系,这是由地图集提供的。
mongo "mongodb+srv://cluster0-z2lf6.mongodb.net/test" --authenticationDatabase admin --username <user> --password <password>
Run Code Online (Sandbox Code Playgroud)
数据库用户的图像:

数据库概述的屏幕快照:

这些是数据库的详细信息:

但是,终端显示此内容(我只包含了大约15行,其余为重复。):
MongoDB shell version v3.6.0
connecting to: mongodb+srv://cluster0-z2lf6.mongodb.net/test
2017-12-24T14:39:42.806+0800 I NETWORK [thread1] Starting new replica set monitor for Cluster0-shard-0/cluster0-shard-00-00-z2lf6.mongodb.net.:27017,cluster0-shard-00-01-z2lf6.mongodb.net.:27017,cluster0-shard-00-02-z2lf6.mongodb.net.:27017
2017-12-24T14:39:42.990+0800 W NETWORK [ReplicaSetMonitor-TaskExecutor-0] Failed to connect to 34.232.245.97:27017, in(checking socket for error after poll), reason: Connection refused
2017-12-24T14:39:42.991+0800 W NETWORK [thread1] Failed to connect to 35.168.27.238:27017, in(checking socket for error after poll), reason: Connection refused
2017-12-24T14:39:43.492+0800 W NETWORK [ReplicaSetMonitor-TaskExecutor-0] Failed to connect to 52.20.90.64:27017, in(checking …Run Code Online (Sandbox Code Playgroud) 我发现 RHEL 的问题完全相同:(我的问题是针对 Windows) 仅安装 mongo shell,而不是 mongodb
是否有 Windows 等价物:mongodb-org-shell
我可以从另一台 Windows 机器上的服务器安装中复制 mongo.exe 吗?
我尝试从 atlas 恢复 mongo 备份文件。
它包含一些 wt 文件。如何恢复。
从 atlas 的每日快照下载备份。
提前致谢。
我正在编写一个用于数据管理的mongo shell脚本.我想用模块化代码编写它,它使用函数库作为模块.在某些情况下,我自己的模块.在其他情况下,精心选择的node.js模块(我知道它将在Mongo shell环境中工作,例如uuid).
不幸的是,Mongo缺乏真正的模块管理.load()不是一回事.我正在寻找一个回填,就像它一样.
有没有人知道一个可以提供CommonJS模块加载功能的库,它是通用的,可以在Mongo shell中运行,还是已经被移植到Mongo shell中运行?
是的,我知道,我可以在纯粹的node.js环境中完成它.但是如果有一个真正的模块加载器可以在mongo shell中运行,那将是我的第一选择.
db.movieDetails.updateMany({
"tomato.consensus": null,
"imdb.votes":{$lt:10000},
"year":{$gte:2010,$lte:2013}},
{
$unset:{"tomato.consensus":""
}
})
Run Code Online (Sandbox Code Playgroud)
当我在mongoshell中输入上面的命令时,我收到一条错误,指出这updateMany不是一个有效的函数.
TypeError:对象video.movieDetails的属性'updateMany'不是(shell)的函数:1:17
我检查了文档,updateMany并列出了一个有效的功能.我想知道为什么我收到错误.
我需要使用MongoDB C#驱动程序构造以下查询
db.Notes.find({ "Group._id" : 74, "CustomFields" : { "$elemMatch" : { "Value" : /batch/i } }, "IsDeleted" : false }).sort({ "CreatedDateTimeUtc" : -1 })
Run Code Online (Sandbox Code Playgroud)
我使用了这样的查询
builder.ElemMatch(x => x.CustomFields, x => x.Value.Contains(filterValue))
Run Code Online (Sandbox Code Playgroud)
它生成mongo查询为
db.Notes.find({ "Group._id" : 74, "CustomFields" : { "$elemMatch" : { "Value" : /batch/s } }, "IsDeleted" : false }).sort({ "CreatedDateTimeUtc" : -1 })
Run Code Online (Sandbox Code Playgroud)
如果你注意到它是附加s /batch/s而不是i/batch/i
我怎样才能完成这项工作?我需要为像这样的过滤器这样做
我可以做这样的事情,以便我可以将所有正则表达式模式应用于所有上述过滤器.
builder.Regex(x => x.CustomFields[-1].Value, new BsonRegularExpression($"/{filterValue}/i"));
Run Code Online (Sandbox Code Playgroud)
这会将查询转换为如下所示,但不会得到任何结果
db.Notes.find({ "Project._id" : …Run Code Online (Sandbox Code Playgroud) 我在 MongoDB 中有一个文档,例如
{ "_id" : ObjectId("51723a2f2b9b90e9eb190c45"), "d" : BinData(0,"c9f0f895fb98ab9159f51fd0297e236d") }
Run Code Online (Sandbox Code Playgroud)
字段“d”已编入索引,但如何通过其在 mongo shell 中的值找到?
例如
db.test.find( {"d": BinData(0,"c9f0f895fb98ab9159f51fd0297e236d") } )
Run Code Online (Sandbox Code Playgroud)
不工作,有什么想法吗?
我正在尝试使用某些日期条件的mongoExport,我在这里读到日期必须是epoch格式.
问题是,
我在下面试过,
> new Date(2013,10,16)
ISODate("2013-11-16T00:00:00Z")
Run Code Online (Sandbox Code Playgroud)
假设我给了Oct-16-2013,但是它让我'2013-11-16'.与纪元格式相同.
> new Date(2013,10,16)*1
1384560000000
>
> new Date(1384560000000)
ISODate("2013-11-16T00:00:00Z")
Run Code Online (Sandbox Code Playgroud)
你能帮忙吗,为什么它把月份改为11?
我怎样才能在mongo db shell中使用for循环?
我的尝试在这一点上坚持:
for (var i = 0; i <= 6; i=i+0.12){
var n = i + 0.12;
db.test.aggregate(
{ $sort: {'deviation': -1}},
{ $unwind: '$foo' },
{ $match: { 'foo.km': {$gt: {n}, $lt: {i}}}},
{ $limit: 1}
)
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
mongodb mongo-shell mongodb-query aggregation-framework mongodb-aggregation
mongo-shell ×10
mongodb ×10
javascript ×2
c# ×1
commonjs ×1
mongodump ×1
mongorestore ×1
require ×1