标签: mongo-shell

是1亿份文件太多了吗?

好吧,我是新手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. 完成请求需要45分钟.
  2. 它在我的硬盘上创建了16 GB的数据.
  3. 它使用了80%的RAM(总共8GB),直到我重新启动PC才会释放它们.

正如您在下面的照片中看到的那样,随着集合中文档的数量不断增加,文档插入的时间也在增长.我建议通过数据文件的最后修改时间:

在此输入图像描述

这是预期的行为吗?我不认为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 mongo-shell

9
推荐指数
1
解决办法
8934
查看次数

无法通过mongo shell连接到mongodb地图集

我检查了其他类似的帖子,但没有一个适合我的情况。

在连接到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)

mongodb mongo-shell mongodb-atlas

9
推荐指数
2
解决办法
4795
查看次数

仅安装 Mongo Client/Shell - 而不是 Windows 上的 MongoDB

我发现 RHEL 的问题完全相同:(我的问题是针对 Windows) 仅安装 mongo shell,而不是 mongodb

是否有 Windows 等价物:mongodb-org-shell

我可以从另一台 Windows 机器上的服务器安装中复制 mongo.exe 吗?

mongodb mongo-shell

9
推荐指数
1
解决办法
1万
查看次数

如何从atlas备份文件中恢复mongo?

我尝试从 atlas 恢复 mongo 备份文件。

它包含一些 wt 文件。如何恢复。

从 atlas 的每日快照下载备份。

提前致谢。

mongodb mongorestore mongodump mongo-shell mongodb-query

9
推荐指数
1
解决办法
4576
查看次数

如何在mongo shell中"require(module)"

我正在编写一个用于数据管理的mongo shell脚本.我想用模块化代码编写它,它使用函数库作为模块.在某些情况下,我自己的模块.在其他情况下,精心选择的node.js模块(我知道它将在Mongo shell环境中工作,例如uuid).

不幸的是,Mongo缺乏真正的模块管理.load()不是一回事.我正在寻找一个回填,就像它一样.

有没有人知道一个可以提供CommonJS模块加载功能的库,它是通用的,可以在Mongo shell中运行,还是已经被移植到Mongo shell中运行?

是的,我知道,我可以在纯粹的node.js环境中完成它.但是如果有一个真正的模块加载器可以在mongo shell中运行,那将是我的第一选择.

javascript require mongodb commonjs mongo-shell

8
推荐指数
2
解决办法
3078
查看次数

mongodb的'updateMany'函数是否已被弃用?

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.movi​​eDetails的属性'updateMany'不是(shell)的函数:1:17

我检查了文档,updateMany并列出了一个有效的功能.我想知道为什么我收到错误.

mongodb mongo-shell

8
推荐指数
2
解决办法
4900
查看次数

使用MongoDB C#驱动程序使用Regex查询编写ElementMatch

我需要使用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

我怎样才能完成这项工作?我需要为像这样的过滤器这样做

  1. 包含,使用.Contains()
  2. 等于,考虑使用.Equals()
  3. 不包含,考虑使用!Field.contains(value)
  4. 不等于
  5. 以..开始
  6. 以..结束

我可以做这样的事情,以便我可以将所有正则表达式模式应用于所有上述过滤器.

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)

c# mongodb mongo-shell

8
推荐指数
1
解决办法
1073
查看次数

MongoDB Shell:通过 BinData 查找

我在 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)

不工作,有什么想法吗?

mongodb mongo-shell

7
推荐指数
1
解决办法
5097
查看次数

Mongo shell中的新日期和ISO日期转换

我正在尝试使用某些日期条件的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?

javascript mongodb mongo-shell

7
推荐指数
1
解决办法
4880
查看次数

如何在mongodb shell中使用for循环?

我怎样才能在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

7
推荐指数
3
解决办法
2万
查看次数