MongoDB Compass无法导出集合的所有数据

6
在尝试从MongoDB Compass导出集合时,它并没有导出所有数据,而只导出在所有文档中都存在的字段。例如:如果文档1具有...
{
    "Name": "Alex",
    "__v": 0
}

如果文档2中有


{
    "Name": "Joe",
     "ID"  : 07
    "__v": 0
}

尝试导出集合时,只有名称字段被导出。我正在尝试通过MongoDB Compass导出所有字段。是否有其他方法可以通过任何代码或脚本导出所有数据?

编辑:解决方案是更新到新版本的Compass,并在从Mongo导出数据时,如果列表中不存在字段名,则有一个选项可以添加缺少的字段,通过此选项我们可以通过Compass添加遗漏的字段。


请告诉我们更详细地,您要导出什么内容...这可能更适合发布在http://superuser.com上。 - deceze
在MongoDB Compass中通过ExportCollection按钮导出 - Rahul_Mandhane
我刚刚用我的集合进行了测试,我能够获取所有字段。你确定你选择了所有字段吗? - Murat Colyaran
是的,您正在使用哪个版本的Compass? - Rahul_Mandhane
版本号:1.25.0 - Murat Colyaran
好的,我正在使用1.22.1版本。让我尝试一下新版本。 - Rahul_Mandhane
3个回答

10

MongoDB Compass一直存在导入导出数据的问题,而且似乎他们不想改善!

当您使用Compass导出数据时,它使用一些示例文档来选择字段,如果您不幸运,您将错过一些字段。

解决方案:

  1. 使用MongoDB Compass聚合选项卡查找所有文档中的现有字段:

    [{$project: { arrayofkeyvalue: { $objectToArray: '$$ROOT'} }},
    {$unwind: '$arrayofkeyvalue'},
    {$group: { _id: null, allkeys: { $addToSet: '$arrayofkeyvalue.k' } }}]

  2. 将第1步骤中的字段添加到导出完整集合(选择字段)

  3. 导出它!


这太荒谬了。他们必须在导出对话框中添加一条注释。 - transang
@Sang 他们确实添加了一条注释,但是这个注释听起来很技术性,类似于“所选字段仅为集合中可用字段的示例。请添加您想要的任何其他字段名称。” - veritas
这个会不会在文档的深层嵌套块中捕获所有字段? - veritas

0

解决方案是,在从Mongo导出数据时,如果字段名称不在列表中,则有一个选项可以通过它添加一个字段,以便我们可以添加由Compass错过的字段。


0

对于从@salmanShariati's的答案中采用的新手用户,只是添加细微差别

进入Compass工具底部屏幕的Mongo Shell(Mongosh)。 选择你的数据库:use databasename;

db.collectionName.aggregate([{$project: { arrayofkeyvalue: { $objectToArray: '$$ROOT'} }},
{$unwind: '$arrayofkeyvalue'},
{$group: { _id: null, allkeys: { $addToSet: '$arrayofkeyvalue.k' } }}])

你将收到的答案是集合中所有字段。例如,这些是我的集合中的键。

<

{ _id: null,
  allkeys: 
   [ 'somefield',
     'cID',
     'userID',
     'dData',
     'dID',
     '_class',
     '_id' ] }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接