所以这是学习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)
Chr*_*ain 21
这里没有好的答案.由于没有架构,因此您无法"描述"该集合.但是,在许多(大多数?)MongoDb应用程序中,模式由编写应用程序(java或c#或其他)中使用的对象层次结构定义,因此您可以反映对象库以获取该信息.否则会有一些试验和错误.
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完全相同:)
虽然事实上是正确的,但你所做的一切都太复杂了.我认为OP只是想知道他/她的数据是什么样的.如果是这样的话,你可以
db.collectionName.findOne()
Run Code Online (Sandbox Code Playgroud)
这将以漂亮的格式在数据库中显示一个文档(也称为记录).