标签: mongo-shell

在 Mongo shell 中使用未定义的变量

我正在设置一个 Mongo 脚本来通过 --eval 获取变量,如下所示:

mongo mydb myscript.js --eval "parameter = 'value'"
Run Code Online (Sandbox Code Playgroud)

但是,我希望脚本仍然可以工作,而不需要--eval.

如果这是基于浏览器的 JS,我只需做一些var internalParameter = window.parameter || null事情来通过检查未定义的变量来绕过引发的 ReferenceError,但mongo没有window. 是否可以通过 Mongo 脚本中的全局对象访问变量,或者我只需将其包装在 try/catch 中?

mongodb mongo-shell

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

如何在 MongoDB 的子文档中添加额外的字段?

我刚刚开始使用 MongoDB。我有一个这样的文件:

   {

     "_id": "12345" 
     "body": "Here is the body" 
     "comments":[
                {
                  "name": "Person 1"
                  "comm": "My comment"},
                {
                  "name": "Person 2"
                  "comm": "Comment 2"}
             ] 
    "author":"Author 1" 
}
Run Code Online (Sandbox Code Playgroud)

我想将此文档更改为:

   {

    "_id": "12345" 
     "body": "Here is the body" 
     "comments":[
                {
                  "name": "Person 1"
                  "comm": "My comment"
                  "checks_": 1
                 },
                {
                  "name": "Person 2"
                  "comm": "Comment 2"
                  "checks_": 4
                }
             ] 
    "author": "Author 1" 
}
Run Code Online (Sandbox Code Playgroud)

我试过了:

db.coll.update({ "_id":12345},{ "$set":{ "comments" :{ "checks_": 1}}})
Run Code Online (Sandbox Code Playgroud)

这删除了评论中的所有子文档并添加{checks_:1}到其中。

我哪里错了?

mongodb mongo-shell

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

使用 mongo shell 更改 mongodb 中的文档结构

我在 mongodb 中有一个文档结构,我想为我的所有文档更改它,而不使用像这个响应这样的聚合函数,而是通过创建一个特定的函数,并得到一个结果:

{
"_id" : ObjectId("String"),
"content" : {
    "href" : "String",
    "text" : "String",
    "code" : "String "
}
}
Run Code Online (Sandbox Code Playgroud)

对此:

{
"_id" : ObjectId("String"),
"href" : "String",
"text" : "String",
"code" : "String "
}
Run Code Online (Sandbox Code Playgroud)

请提出任何建议。谢谢你。

mongodb mongo-shell

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

MongoServerSelectionError:连接 ECONNREFUSED ::1:27017

当我尝试使用 Mongoose 将我的应用程序与数据库连接时遇到问题。已经尝试过以下我在谷歌上找到的解决方案:

在Windows上重新启动MongoDB服务,使用位于MongoDB的bin文件上的cmd手动打开数据库,但我无法解决它。谁能帮我?

这是我的index.js

const { MongoClient } = require('mongodb')
const url = 'mongodb://localhost:27017';
const database = 'e-comm'
const client = new MongoClient(url);

async function getData()
{
    let result = await client.connect();
    let db = result.db(database);
    let collection = db.collection('products');
    let response =  await collection.find({}).toArray();
    console.log(response);
}
getData();

Run Code Online (Sandbox Code Playgroud)

并抛出错误

C:\Users\HP\new node\node_modules\mongodb\lib\sdam\topology.js:292
                const timeoutError = new error_1.MongoServerSelectionError(`Server selection
 timed out after ${serverSelectionTimeoutMS} ms`, this.description);
                                     ^

MongoServerSelectionError: connect ECONNREFUSED ::1:27017
    at Timeout._onTimeout (C:\Users\HP\new node\node_modules\mongodb\lib\sdam\topology.js:29
2:38)
    at listOnTimeout (node:internal/timers:564:17)
    at process.processTimers (node:internal/timers:507:7) …
Run Code Online (Sandbox Code Playgroud)

mongodb node.js mongo-shell nodemon

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

如何用“.”引用集合名称 在蒙戈数据库中?

我有一个 mongo DB,在 mongo shell 中,当我运行“show collections”时,它返回集合名称中带有点的集合,例如

a.1
a.2
a.3
Run Code Online (Sandbox Code Playgroud)

我如何在命令中引用它

db.a.1.find()
Run Code Online (Sandbox Code Playgroud)

上面返回 SyntaxError:missing ; 声明之前

mongodb mongo-shell

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

MongoDB获取数组中特定键的计数

在mongoDB中,我们如何获取数组中特定键的计数

{
 "_id" : ObjectId("52d9212608a224e99676d378"),
 "business" : [
  {
   "name" : "abc",
   "rating" : 4.5
  },
  {
   "name" : "pqr"
  },
  {
   "name" : "xyz",
   "rating" : 3.6
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,business是一个数组(带有"name"和/或"rating"键)

如何才能获得仅存在"评级"密钥的业务数组?

预期产量为:2

arrays mongodb mongo-shell

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

MongoDB:在集合中的数百万条记录上查找count()命令的执行时间?

我正在尝试找到对包含数百万个testdata记录的集合执行count()所需的时间,具体如下: -

1)从第一个Mongo shell我使用代码将数百万条记录插入到集合中

for (var i = 0; i < 10000000; ++i){ 
  db.unicorns.insert({name: 'sampleName', gender: 'm', weight: '440' });
}
Run Code Online (Sandbox Code Playgroud)

2)从2ndMongo shell我试图在该集合上找到count()(Imp:插入仍然在第一个Mongo Shell上执行)

db.unicorns.count()
Run Code Online (Sandbox Code Playgroud)

我研究过但发现explain()和stats()不能应用于count()命令.

一些

我需要知道在收集插件(类似实时场景)时count()需要多少时间?

这样做还有其他好方法吗?

mongodb mongo-shell mongodb-query

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

即使我已连接并使用该数据库,Mongo shell也会抛出“ReferenceError db未定义”?


nicole@MacBook-Air client % mongosh
Current Mongosh Log ID: 6167b26073f2085eee4554b6
Connecting to:          mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB:          5.0.3
Using Mongosh:          1.1.0

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting:
   2021-10-13T15:36:00.307-07:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------

test> show dbs
admin     41 kB
config   111 kB
local     41 kB
test    8.19 kB
test> use test
already on db test
test> show collections
users
test> test.users.find() …
Run Code Online (Sandbox Code Playgroud)

mongodb referenceerror mongo-shell

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

mongosh 是有效命令,但未找到 mongo

我安装了 mongodb 社区 6.0.0。

mongo未找到该命令。

该命令mongosh正在运行。

mongosh --version
1.5.4
Run Code Online (Sandbox Code Playgroud)

mongodb mongo-shell

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

将数据从一个集合复制到另一个集合时,_id字段是否会在MongoDB中更改?

我们计划使用MongoDB _id作为我们将提供给客户端的密钥.因此,要求是如果我们需要将数据从一个集合移动到另一个集合,则不应更改此密钥.将使用db.copyDatabase()或mongoimport执行该副本.

将数据从一个集合复制到另一个集合的方法之一是迭代第一个集合(C1)中的文档并将这些文档插入第二个集合(C2).在这种情况下,_id应保持相同(在C2中),因为它将出现在插入的文件(C1中)中(与我们自己提供_id的情况相同).

但是,如果存在另一种复制文档的方式,则_id可能会更改,因为它取决于:

(1)UNIX时间戳(2)机器标识符(3)ProcessId

(**只有在复制时MongoDB从C1中的文档中删除_id并在插入C2时重新生成它时才会发生这种情况?)

无论目标集合的位置如何,我们都希望_id值相同:(1)在同一个数据库中(2)不同的数据库 - 同一台机器(3)不同的数据库 - 不同的机器)

谢谢

mongodb mongo-shell mongodb-query

0
推荐指数
1
解决办法
1098
查看次数

如何更新 MongoDB 文档内的文档?

{
"_id" : O5,
"bazar" : {
    "indiraBazar" : {
        "units" : "taka",
        "no" : 560,
        "value" : 0.90
    },
    "dhakaBazar" : {
        "no" : "no item",
        "value" : 1
    },
    "kolaBazar" : {
        "no" : "unlimited",
        "value" : 4
    }
},
"vat" : false,
"total" : 2
Run Code Online (Sandbox Code Playgroud)

}

说上面的文件正在bazars收集中。value这里我如何将filed of从4设置kolaBazar为5?

mongodb mongo-shell

0
推荐指数
1
解决办法
2216
查看次数

MongoDB更新ObjectId字段

我有一个文件,其属性是ObjectId.例如,下面代码中的锚点字段:

{ "__v" : 0, "_id" : ObjectId("5654d896481c5186ddaf4481"), "anchor" : ObjectId("565480e5481c5186ddaf446c"), "base_url" : "http://example.com"}
Run Code Online (Sandbox Code Playgroud)

我在这里看到了文档,但不清楚如何更新ObjectId引用字段.我希望这个引用只指向另一个anchor文档,我可以将ObjectId作为字符串放置如下:

db.categories.update(
   { },
   {
      $set {anchor: "5654d47a481c5186ddaf4479"}
   },
   { multi: true }
)
Run Code Online (Sandbox Code Playgroud)

mongodb mongo-shell

0
推荐指数
1
解决办法
1212
查看次数

如何使用 mongosh 直接连接数据库

我的本地 mongodb 实例出现连接问题。并不是说它不起作用,而是有些东西不起作用,而我期望它们能起作用。

就我而言,我正在尝试使用 mongo 设置我的 NestJS 应用程序(本教程)。它在某个时候指出:

MongooseModule.forRoot('mongodb://localhost/blog')
Run Code Online (Sandbox Code Playgroud)

就我而言,这将是

MongooseModule.forRoot('mongodb://admin:admin@0.0.0.0:27017/blog')
Run Code Online (Sandbox Code Playgroud)

现在,无论我做什么,只要我在该字符串中包含数据库名称,它就不会连接。

mongosh我也可以重现这个问题

$> mongosh mongodb://admin:admin@0.0.0.0:27017/blog
Current Mongosh Log ID: 640c5eeaaf2a65c11a7dda25
Connecting to:      mongodb://<credentials>@0.0.0.0:27017/blog? directConnection=true&appName=mongosh+1.8.0
MongoServerError: Authentication failed.
Run Code Online (Sandbox Code Playgroud)

但是当我删除数据库名称时,它可以工作(也在我的 NestJs 应用程序中)。我对 Mongo 不太熟悉,所以也许我完全没有抓住要点,但我认为这应该可行,并且您必须先连接到数据库,然后才能执行任何操作。所以我的问题是,我在这里做错了什么?任何帮助将不胜感激!

mongodb mongo-shell nestjs

0
推荐指数
1
解决办法
7101
查看次数