我如何描述Mongo中的集合?

Cav*_*hon 45 mongodb

所以这是学习Mongo Db的第3天.我来自MySql世界......

很多时候,当我需要为我不熟悉的MySql表编写查询时,我会使用"desc"命令 - 基本上告诉我应该在查询中包含哪些字段.

我如何为Mongo数据库做到这一点?我知道,我知道......我正在无模式数据库中搜索模式.=)但是用户怎么知道在他们的查询中使用哪些字段呢?

我是以错误的方式去做的吗?显然我正试图在Mongo数据库中使用MySql方式做事.什么是Mongo方式?

Bha*_*aja 30

在editor/mongoshell中键入以下查询

var col_list= db.emp.findOne();
for (var col in col_list) { print (col) ; }
Run Code Online (Sandbox Code Playgroud)

输出将为您提供集合中列的名称:

_id
name
salary
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这种方法.它不一定给出集合中所有文档的结构,但它至少可以从数据库探索开始. (2认同)

Chr*_*ain 21

这里没有好的答案.由于没有架构,因此您无法"描述"该集合.但是,在许多(大多数?)MongoDb应用程序中,模式由编写应用程序(java或c#或其他)中使用的对象层次结构定义,因此您可以反映对象库以获取该信息.否则会有一些试验和错误.

  • 此外,在给定集合中也没有强制执行一致的文档结构,因此您实际上无法描述它,因为您查询的数据可能因文档而异. (5认同)

Anu*_*rag 18

这是我30天或类似于使用MongoDB的东西.不幸的是,由于我公司当前的基础设施问题,我们在使用MongoDB后已经切换回MySQL.但是在MongoDB和MySQL上实现了相同的模型,我现在可以清楚地看到它们的区别.

当然,在处理像MongoDB这样的无模式数据库时会涉及一个模式,但模式是由应用程序而不是数据库决定的.无论给出什么,数据库都会推进.只要您知道管理员没有秘密登录Mongo并进行更改,并且通过某个包装器对数据库的所有访问都是控制器,那么您应该查看模式的唯一位置是模型类.例如,在我们的Rails应用程序中,这些是我们在Mongo中的两个模型,

class Consumer
    include MongoMapper::Document

    key :name, String
    key :phone_number, String
    one :address
end

class Address
    include MongoMapper::EmbeddedDocument

    key :street, String
    key :city, String
    key :state, String
    key :zip, String
    key :state, String
    key :country, String
end
Run Code Online (Sandbox Code Playgroud)

现在切换到MySQL后,我们的类看起来像这样,

class Consumer < ActiveRecord::Base
    has_one :address
end

class Address < ActiveRecord::Base
    belongs_to :consumer
end
Run Code Online (Sandbox Code Playgroud)

不要被班级的简洁所迷惑.在MySQL的后一版本中,字段是直接从数据库中提取的.在前一个例子中,田野就在我们眼前.

使用MongoDB,如果我们必须更改特定模型,我们只需添加,删除或修改类本身中的字段,它就可以正常工作.我们不必担心保持数据库表/列与类结构同步.因此,如果您正在寻找MongoDB中的架构,请查看您的应用程序以获取答案,而不是数据库.

基本上我说的与@Chris Shain完全相同:)


小智 9

我也有这个需求,Cavachon.所以我创建了一个名为Variety的开源工具,它正是这样做的:链接

希望你会发现它很有用.如果您有任何问题或使用它有任何问题,请告诉我.

祝好运!


Rap*_*Rap 7

虽然事实上是正确的,但你所做的一切都太复杂了.我认为OP只是想知道他/她的数据是什么样的.如果是这样的话,你可以

db.collectionName.findOne()
Run Code Online (Sandbox Code Playgroud)

这将以漂亮的格式在数据库中显示一个文档(也称为记录).