标签: mongo-shell

运行 rs.initiate() 后,mongodb 副本集错误“...replSetHeartbeat 需要身份验证...”

我有 2 个虚拟机,两个虚拟机上都运行着 mongodb。我已经创建了用户和角色并添加了用于测试的数据。一切正常,直到我尝试设置副本集。当我运行 rs.initiate() 时,出现“...replSetHeartbeat 需要身份验证...”错误,如下所示。我可以通过传递 --host "nodeserver-hulk:27017 手动从 "hawkeye" 连接到 "hulk" 服务器。有什么想法吗?

系统

Ubuntu Server 18.04.4 LTS
Mongod v.4.2.3
Run Code Online (Sandbox Code Playgroud)

rs.启动命令

rs.initiate(
   {
      _id: "r1",
      version: 1,
      members: [
         { _id: 0, host : "nodeserver-hulk:27017"},
         { _id: 1, host : "nodeserver-hawkeye:27017"}
      ]
   }
)
Run Code Online (Sandbox Code Playgroud)

rs.启动错误

{
        "ok" : 0,
        "errmsg" : "replSetInitiate quorum check failed because not all proposed set members responded affirmatively: nodeserver-hawkeye:27017 failed with command replSetHeartbeat requires authentication",
        "code" : 74,
        "codeName" : "NodeNotFound"
}

Run Code Online (Sandbox Code Playgroud)

mongod.conf 文件(两台服务器相同) …

replication mongodb mongo-shell

3
推荐指数
1
解决办法
9204
查看次数

在mongorc.js中选择特定数据库

是否可以选择MongoDB在mongorc.js中启动时应使用的数据库?

use dbname
Run Code Online (Sandbox Code Playgroud)

没有运作.这是一个非JavaScript宏.

mongodb nosql mongo-shell

2
推荐指数
1
解决办法
1642
查看次数

如何在MongoDB shell中将变量用作字段名称的一部分?

如何在mongodb shell中使用变量作为字段名称的一部分?我正在尝试执行以下操作:

> var site = "google.com";
> var y = 10;
> var m = 5;

// This fails (field names as concatenation):
> db.test.update({ "domain" : site},
      { $inc : {"counts.year."+y : 1, "counts.month."+m : 1}}, upsert=true);

> Thu Apr 19 19:12:56 SyntaxError: missing : after property id (shell):1

// This works:
> db.test.update({ "domain" : site}, { $inc : {"counts.year.10" : 1,
      "counts.month.5" : 1}}, upsert=true);
Run Code Online (Sandbox Code Playgroud)

我想问题就在于JS对象的创建方式:例如var t = 10; doc = {t : 0};有效 …

javascript mongodb mongo-shell

2
推荐指数
1
解决办法
4085
查看次数

MongoDB toLowerCase()

我有一个名为Profiles的集合,其中包含一个名为emails的数组.

我想将数组中的所有电子邮件字符串更改为小写.

db.Profiles.update({"emails":/@/i}, {$set: {"emails" : emails.toLowerCase()}}})
Run Code Online (Sandbox Code Playgroud)

错误:

Tue Jan 29 16:52:28 SyntaxError:missing)在参数列表(shell)之后:1

我也发现了这个:

db.Profiles.find().forEach(
  function(e) {
    e.emails = e.emails.toLowerCase();
    db.Profiles.save(e);
  }
)
Run Code Online (Sandbox Code Playgroud)

错误:

Tue Jan 29 16:51:41 TypeError:e.emails.toLowerCase不是函数(shell):3

在此先感谢您的帮助.

mongodb mongo-shell

2
推荐指数
1
解决办法
4829
查看次数

如何从mongo shell中的Date值创建ObjectId?

我想在mongo shell中创建一个新的ObjectId但是在过去的Date中创建一个新的ObjectId,以便在过去模拟该文档的创建.这与ObjectId 的getTimestamp()函数相反(即给出一个时间戳,获取一个在调用时返回该时间戳的ObjectId getTimestamp)

任何想法如何做到这一点?

javascript mongodb mongo-shell

2
推荐指数
1
解决办法
1665
查看次数

Mongo Shell中NumberLong的行为

我在Mongo Shell中写了以下4个语句

一世) NumberLong(3)

II) NumberLong(3)+NumberLong(4)

三) typeof NumberLong(3)

IV) typeof (NumberLong(3)+NumberLong(4))

和他们相应的产出是

一世) NumberLong(3)

II) 7

三) object

IV) number

虽然第二个结果使第四个结果显而易见,但我无法找到这个行为的头部或尾部.幕后发生了什么?我尝试在MongoDB文档中找到基础概念,但找不到多少.请帮忙!!

mongodb mongo-shell

2
推荐指数
1
解决办法
3563
查看次数

mongoDb中键值的顺序

mongo代码:

db.temperature.insert({“ x”:3,“ y”:4});

db.temperature.find();

输出 {“ _id”:ObjectId(“ 52b418fb132c1f3236831447”),“ y”:4,4,“ x”:3}

请帮助我理解为什么在我的情况下(上)。即使插入顺序不同,find方法也会先显示Y值,然后再显示x值。

感谢任何帮助。

mongodb mongo-shell

2
推荐指数
1
解决办法
2827
查看次数

MongoDB选择查询列表中的所有where字段值

如何在MongoShell中实现以下SQL?

Select TableA.* from TableA where TableA.FieldB in (select TableB.FieldValue from TableB)
Run Code Online (Sandbox Code Playgroud)

Mongo doc给出了一些例子

db.inventory.find( { qty: { $in: [ 5, 15 ] } } )
Run Code Online (Sandbox Code Playgroud)

我希望该数组是从另一个查询动态的.可能吗?

扩展我的问题

我有一个bot名字的集合

机器人收藏

{
    "_id" : ObjectId("53266697c294991f57c36e42"),
    "name" : "teoma"
}
Run Code Online (Sandbox Code Playgroud)

我有一个用户流量的集合,在该流量集合中,我有一个字段 useragent

userTraffic集合

{
    "_id" : ObjectId("5325ee6efb91c0161cbe7b2c"),
    "hosttype" : "http",
    "useragent" : "Mediapartners-Google",
    "is_crawler" : false,
    "City" : "Mountain View",
    "State" : "CA",
    "Country" : "United States"
}
Run Code Online (Sandbox Code Playgroud)

我想选择其中useragent包含任何bot集合名称的所有用户流量文档

这就是我想出的

var botArray = db.bots.find({},{name:1, _id:0}).toArray()

db.Sessions.find({ …
Run Code Online (Sandbox Code Playgroud)

mongodb mongo-shell mongodb-.net-driver

2
推荐指数
1
解决办法
9536
查看次数

为什么mongo聚合在shell中工作但在PHP中超过16MB

我有一个非常庞大的mongo聚合命令.

db.container_product.aggregate([
    {"$unwind":"$product"},
    {"$group":{"_id":"$product","container_ids":{"$push":"$container_id"}}}
])
Run Code Online (Sandbox Code Playgroud)

它产生了近5k组,但它们都是普通的整数.例如:

{ 
    "_id" : NumberInt(107058402), 
    "container_ids" : [
        NumberInt(107058409), 
        NumberInt(107058410), 
        NumberInt(107058411), 
        NumberInt(107058412), 
        NumberInt(107058413)
    ]
}
Run Code Online (Sandbox Code Playgroud)

当我在shell(普通shell,还有Robomongo等)中运行它时它工作得很好.但是当我尝试从PHP运行它时,它给了我16MB的错误.

172.16.0.2:27017: exception: aggregation result exceeds maximum document size (16MB)

在这种情况下,PHP和shell之间的巨大差异是什么?

我怎么解决这个问题?

php mongodb mongo-shell

2
推荐指数
1
解决办法
97
查看次数

如何在 MongoDB shell 中将 NumberDecimal 转换为 Double?

我有一个NumberDecimal类型为“test”的文档

{ "_id" : ObjectId("5d1a202e476381c30cd995a4"),  "test" : NumberDecimal("0.1") }
Run Code Online (Sandbox Code Playgroud)

如何“检测”字段从转换NumberDecimalDoubleMongoDB中的壳呢?

我试过执行

db.collection.find({"test": {$exists: true}}).forEach(function (x) {   x.test = parseFloat(x.test);   db.collection.save(x); });
Run Code Online (Sandbox Code Playgroud)

但不要解决这个问题,因为它返回 NaN

decimal bigdecimal mongodb mongo-shell mongodb-query

2
推荐指数
1
解决办法
5096
查看次数