标签: mongo-shell

mongodb 初始加载 - 动态构建 DBRef

我正在尝试使用 db.collections.insert 将初始数据加载到 mongodb。我有一个例子,我将插入城镇集合,然后插入邮政编码集合。邮政编码集合是指城镇集合。然而,当我编写脚本时,我不知道城镇的_id。想知道如何动态构建参考。

在下面的示例中,我需要将曼切斯特镇的 ID 填充到“未知”的位置。

db.town.insert({name:"Manchester",state:{$ref:"state", $id:"CT"},status:"NOT-SUBSCRIBED"});

db.zipcode.insert({_id:"06040", town:{$ref:"town", $id:"unkown"}});
db.zipcode.insert({_id:"06041", town:{$ref:"town", $id:"unkown"}});
db.zipcode.insert({_id:"06042", town:{$ref:"town", $id:"unkown"}});
Run Code Online (Sandbox Code Playgroud)

如果有不同的方式来加载我的初始数据而不是 db.collections.insert,我也想知道。

mongodb mongo-shell

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

如何获取 mongo db 的实际大小?

当我在 mongo shell 中运行以下命令时,

db.stats()
Run Code Online (Sandbox Code Playgroud)

我到了下面,这是有线的。当我检查 mongoDB 安装文件夹时,它只使用了大约 2 GB 磁盘空间?

请参阅下面的 fsTotalSize 超过 80 GB

在此输入图像描述

mongodb mongo-shell

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

如何在 MongoDB shell 中查看整个数组?

最近在MongoDB中做一个Mini项目。我试图使用该命令找出字段的不同值db.collections.distinct(<field>)

上面的命令检索数组内给定字段的所有不同值。但由于我有 12k 个文档,所有值都没有显示在我的控制台中。

这是我得到的输出..如何查看整个结果? 在此输入图像描述

我搜索了互联网和文档,但无法得到正确的答案。

mongodb mongo-shell

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

默认情况下,在mongodb中连接到特定数据库

我在linux机器上运行mongodb.所以每次我从控制台连接到它(打字mongo)我得到这样的东西:

MongoDB shell version: 2.4.9
connecting to: test
Run Code Online (Sandbox Code Playgroud)

然后我正在使用myDatabase(myDatabase的99%是相同的).所以基本上我总是做一些不必要的工作.有没有办法配置mongo,以便它myDatabase默认连接?

mongodb mongo-shell

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

MongoDB奇怪的writeResult行为

我正在使用mongodb(v2.6.7)和mongo(2.6.7)shell客户端.

我试图使用insert和update命令返回的WriteResult对象.

根据mongodocs的错误,它返回一个带有writeError子文档的writeResult对象.但我无法在shell或mongo的javascript文件中访问此子文档.

以下是我的问题的说明.

  • 我插入一个对象并获得成功的writeResult.
  • 然后我再次使用相同的_id插入,我正在正确设置了"writeError"的屏幕上正确打印了writeResult.
  • 当我用printjson()方法打印时,writeResult对象似乎包含writeError
  • 但是当我用JSON.stringify()打印它时,我无法看到"writeError".
  • writeResult.writeError也是未定义的,因此我无法访问其writeResult.writeError.code属性.

有人可以解释为什么会发生这种情况,以及正确的方法是什么.


afv:PRIMARY>writeResult=db.sysinfo.insert({_id:"myid",otherData:"otherDataValue"})

WriteResult({ "nInserted" : 1 })

afv:PRIMARY>writeResult=db.sysinfo.insert({_id:"myid",otherData:"otherDataValue"})

WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: afvadmin.sysinfo.$_id_  dup key: { : \"myid\" }"
    }
})

afv:PRIMARY> printjson(writeResult)
{
    "nInserted" : 0,
    "writeError" : {
        "code" : 11000,
        "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: afvadmin.sysinfo.$_id_  dup …

mongodb mongo-shell

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

BinData() 中的十六进制而不是 base64 - MongoDB

有没有办法在 mongo 中将二进制值的十六进制而不是 base64 发送到 BinData() ?

mongodb mongo-shell

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

MongoDb解释失败:"未知的顶级操作符:$ query"

我试图从非常简单的查询中获得解释.它使用以下架构的帖子集合:

> db.posts.findOne()
{
        "_id" : ObjectId("55236e6182bf196454a952b6"),
        "Content" : "wuOfCjKborHcxkoyXzXiW",
        "CreatedAtUtc" : ISODate("2014-01-18T23:59:30.023Z"),
        "Tags" : [
                "sjM",
                "Van",
                "Orm"
        ],
        "Title" : "msAQAbQwAl",
        "Author" : "yIIhato",
        "Comments" : [ ]
}
Run Code Online (Sandbox Code Playgroud)

查询我想解释的是:

db.posts.find( { $query: {}, $orderby: { "CreatedAtUtc" : -1 } } )
Run Code Online (Sandbox Code Playgroud)

它产生适当的结果,没有任何错误.但是当我想解释它时,它会抛出异常.我已经尝试过这些命令来解释查询:

db.posts.explain().find( { $query: {}, $orderby: { "CreatedAtUtc" : -1 } } )
db.posts.find( { $query: {}, $orderby: { "CreatedAtUtc" : -1 } } ).explain()

var cursor = db.posts.find( { $query: {}, $orderby: { "CreatedAtUtc" : …
Run Code Online (Sandbox Code Playgroud)

mongodb mongo-shell

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

MongoDB - 将简单字段变成对象

在 MongoDB 中,我想更改文档的结构:

{
    discount: 10,
    discountType: "AMOUNT"
}
Run Code Online (Sandbox Code Playgroud)

到:

{
    discount: {
        value: 10,
        type: "AMOUNT"
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我在 mongo shell 中尝试了以下查询:

db.discounts.update({},
    {
        $rename: {
             discount: "discount.value",
             discountType: "discount.type"
        }
    },
    {multi: true}
)
Run Code Online (Sandbox Code Playgroud)

但它会抛出一个错误:

"writeError" : {
    "code" : 2,
    "errmsg" : "The source and target field for $rename must not be on the same path: discount: \"discount.value\""
}
Run Code Online (Sandbox Code Playgroud)

我想到的一个解决方法是分两步完成:首先将新结构分配给新字段(比方说discount2),然后将其重命名为discount. 但也许有一种方法可以一步完成?

mongodb mongo-shell mongodb-query

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

MongoDB 将字符串类型转换为浮点类型

按照这里的建议MongoDB: How to change the type of a field? 我尝试更新我的集合以更改字段的类型及其值。

这是更新查询

db.MyCollection.find({"ProjectID" : 44, "Cost": {$exists: true}}).forEach(function(doc){
    if(doc.Cost.length > 0){
        var newCost = doc.Cost.replace(/,/g, '').replace(/\$/g, '');
        doc.Cost =  parseFloat(newCost).toFixed(2);  
        db.MyCollection.save(doc);
        } // End of If Condition
    }) // End of foreach
Run Code Online (Sandbox Code Playgroud)

完成上述查询后,当我运行以下命令时

db.MyCollection.find({"ProjectID" : 44},{Cost:1})
Run Code Online (Sandbox Code Playgroud)

我仍然有Cost字段作为字符串。

{
    "_id" : ObjectId("576919b66bab3bfcb9ff0915"),
    "Cost" : "11531.23"
}

/* 7 */
{
    "_id" : ObjectId("576919b66bab3bfcb9ff0916"),
    "Cost" : "13900.64"
}

/* 8 */
{
    "_id" : ObjectId("576919b66bab3bfcb9ff0917"),
    "Cost" : "15000.86"
}
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么? …

mongodb mongo-shell

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

为什么我不能使用mongo shell连接到副本集?

我可以使用mongo shell版本3.2.11中的以下命令连接到副本集.但同样适用于mongo shell v3.4.1.

mongo --host \
      "replicaSet1/10.10.10.15:27001,10.10.10.16:27002,10.10.10.17:27000" mydbname \
      -u root -p root \
      --authenticationDatabase admin

 [main] Error: Failed to parse mongodb:// URL: mongodb://replicaSet1/10.10.10.15:27001,10.10.10.16:27002,10.10.10.17:27000/mydbname :
Run Code Online (Sandbox Code Playgroud)

我在这里读到,自v 3.4.1发布以来,副本集地址格式没有改变.

为什么我无法连接到db?什么是解析错误,根据新格式(如果它在那里).

mongodb mongo-shell

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

标签 统计

mongo-shell ×10

mongodb ×10

mongodb-query ×1