如何将MongoDB集合中的所有记录导出到.csv文件中?
mongoexport --host localhost --db dbname --collection name --type=csv > test.csv
Run Code Online (Sandbox Code Playgroud)
这要求我指定我需要导出的字段的名称.我可以直接导出所有字段而不指定字段名称吗?
在MongoDB聚合框架中,我希望在对象(即JSON集合)上使用$ unwind运算符.看起来这不可能,是否有解决方法?有计划实施吗?
例如,从聚合文档中获取文章集合.假设有一个额外的字段"评级"是来自用户 - >评级的地图.你能算出每个用户的平均评分吗?
除此之外,我对聚合框架非常满意.
更新:这是每个请求的JSON集合的简化版本.我正在存储基因组数据.我不能真正使基因型成为一个数组,因为最常见的查找是获取随机人的基因型.
variants: [
{
name: 'variant1',
genotypes: {
person1: 2,
person2: 5,
person3: 7,
}
},
{
name: 'variant2',
genotypes: {
person1: 3,
person2: 3,
person3: 2,
}
}
]
Run Code Online (Sandbox Code Playgroud) 更新:MongoDB的后续操作获取集合中所有键的名称.
正如Kristina所指出的,可以使用Mongodb的map/reduce来列出集合中的键:
db.things.insert( { type : ['dog', 'cat'] } );
db.things.insert( { egg : ['cat'] } );
db.things.insert( { type : [] });
db.things.insert( { hello : [] } );
mr = db.runCommand({"mapreduce" : "things",
"map" : function() {
for (var key in this) { emit(key, null); }
},
"reduce" : function(key, stuff) {
return null;
}})
db[mr.result].distinct("_id")
//output: [ "_id", "egg", "hello", "type" ]
Run Code Online (Sandbox Code Playgroud)
只要我们想要只获得位于第一级深度的键,这就可以了.但是,它将无法检索位于更深层次的密钥.如果我们添加一条新记录:
db.things.insert({foo: {bar: {baaar: true}}})
Run Code Online (Sandbox Code Playgroud)
我们再次运行上面的map-reduce + distinct片段,我们将得到:
[ …Run Code Online (Sandbox Code Playgroud) 我想知道如何在MongoDB的表中找到所有列名,就像你SHOW COLUMNS FROM foo;在mysql中使用的那样.
我有两个mongo集合,一个是生产环境,另一个是测试环境.我如何比较其中两个之间的差异?我尝试将它们转储到bson然后转换为json.但我不能对它们执行简单的差异,因为排序可能会有所不同,而且json文件太大而无法排序.
在MongoDB中,使用$type,可以根据字段是否与BSON数据类型匹配来过滤搜索(请参阅DOCS).
例如.
db.posts.find({date2: {$type: 9}}, {date2: 1})
Run Code Online (Sandbox Code Playgroud)
返回:
{
"_id" : ObjectId("4c0ec11e8fd2e65c0b010000"),
"date2" : "Fri Jul 09 2010 08:25:26 GMT"
}
Run Code Online (Sandbox Code Playgroud)
我需要一个查询,告诉我该字段的实际类型是什么,对于集合中的每个字段.这可能与MongoDB有关吗?
我开始使用 MongoDB,我想知道是否可以在数据存储中查询具有特定值的任何属性。
所以而不是:
db.foo.find({'color':'red'})
Run Code Online (Sandbox Code Playgroud)
我想看看你是否可以做类似的事情:
db.foo.find({'%':'red'})
Run Code Online (Sandbox Code Playgroud)
那可能吗?是否有用于属性槽通配符的语法?我尝试使用正则表达式,但这给了我一个错误。
通常,您可以使用以下命令从集合中删除字段。但是,下面的代码不适用于空 ( "") 字段。如何删除 MongoDB 中的空字段?
db.collection.update({}, {$unset: {"": ""}}, {multi:true})
Run Code Online (Sandbox Code Playgroud)
当我尝试此操作时,我收到以下错误消息:
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 56,
"errmsg" : "An empty update path is not valid."
}
})
Run Code Online (Sandbox Code Playgroud) 我有一个文件如下:
var data={"john:"friend",
"fruit":"banana",
"tv":[{"livingroom":"led",
"bedroom":"lcd"
"fruit":"banana"}]}
Run Code Online (Sandbox Code Playgroud)
我试图返回一个包含所有唯一键的数组,如下所示:
["john","fruit,livingroom,bedroom]
Run Code Online (Sandbox Code Playgroud)
所以我有以下代码:
var mykeys=[];
database.find({},function(result){
result.forEach(function(each){
for (key in each){
mykeys.push(key)
};
}});
Run Code Online (Sandbox Code Playgroud)
但这会返回一大堆我不需要的对象,例如:
[$__, isNew, errors, _doc, $__original_save, save, _pres, _posts....]
Run Code Online (Sandbox Code Playgroud)
无论如何我可以摆脱文档中没有的这些键吗?我知道这里的mapreduce答案MongoDB get the names of all the keys in a MongoDB collection但我不知道如何将它翻译成猫鼬。AFAIK 猫鼬不支持 runCommand。