我正在尝试使用 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,我也想知道。
当我在 mongo shell 中运行以下命令时,
db.stats()
Run Code Online (Sandbox Code Playgroud)
我到了下面,这是有线的。当我检查 mongoDB 安装文件夹时,它只使用了大约 2 GB 磁盘空间?
请参阅下面的 fsTotalSize 超过 80 GB
最近在MongoDB中做一个Mini项目。我试图使用该命令找出字段的不同值db.collections.distinct(<field>)。
上面的命令检索数组内给定字段的所有不同值。但由于我有 12k 个文档,所有值都没有显示在我的控制台中。
我搜索了互联网和文档,但无法得到正确的答案。
我在linux机器上运行mongodb.所以每次我从控制台连接到它(打字mongo)我得到这样的东西:
MongoDB shell version: 2.4.9
connecting to: test
Run Code Online (Sandbox Code Playgroud)
然后我正在使用myDatabase(myDatabase的99%是相同的).所以基本上我总是做一些不必要的工作.有没有办法配置mongo,以便它myDatabase默认连接?
我正在使用mongodb(v2.6.7)和mongo(2.6.7)shell客户端.
我试图使用insert和update命令返回的WriteResult对象.
根据mongodocs的错误,它返回一个带有writeError子文档的writeResult对象.但我无法在shell或mongo的javascript文件中访问此子文档.
以下是我的问题的说明.
有人可以解释为什么会发生这种情况,以及正确的方法是什么.
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 … 有没有办法在 mongo 中将二进制值的十六进制而不是 base64 发送到 BinData() ?
我试图从非常简单的查询中获得解释.它使用以下架构的帖子集合:
> 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 中,我想更改文档的结构:
{
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: 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)
我在这里做错了什么? …
我可以使用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?什么是解析错误,根据新格式(如果它在那里).