所以我有一个使用MongoDB作为数据库的应用程序.该应用程序使用了一些集合.
何时以及如何定义数据库的"模式",包括设置所有集合以及所需的索引?
AFAIK,你无法在MongoDB中定义空集合(如果我错了,请纠正我,如果我能做到这一点,它基本上会回答这个问题).我应该为每个集合插入一个虚拟值并使用它来设置我的所有索引吗?
这是什么最好的做法?
kir*_*gin 11
您不在MongoDB中创建集合.
您只需立即开始使用它们是否"存在".
现在来定义"架构".正如我所说,你刚开始使用一个集合,所以,如果你需要确保一个索引,那就继续这样做吧.没有集合创建.首次修改时会有效地创建任何集合(创建索引计数).
> db.no_such_collection.getIndices()
[ ]
> db.no_such_collection.ensureIndex({whatever: 1})
> db.no_such_collection.getIndices()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "test.no_such_collection",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"whatever" : 1
},
"ns" : "test.no_such_collection",
"name" : "whatever_1"
}
]
Run Code Online (Sandbox Code Playgroud)
首先,这是如何使用内置交互式终端在MongoDB中创建空集合,所以你可以这样做,
db.createCollection('someName'); // create empty collection
Run Code Online (Sandbox Code Playgroud)
只是你没有必要,因为有人说,一旦你开始与数据库交互,他们将实时创建.
您可以创建自己的类,与mongo数据库交互.在该类中,您可以定义必须满足的规则,然后才能将数据插入到mongo集合中.
或者如果您使用node.js服务器端,您可以安装mongoose节点包,它允许您以OOP样式与数据库交互(为什么还要重新发明轮子,对吧?).
Mongoose提供了一种直接的,基于模式的解决方案来为您的应用程序数据建模.它包括内置的类型转换,验证,查询构建,业务逻辑钩子等,开箱即用.
docs: mongoose npm安装和基本用法 https://www.npmjs.com/package/mongoose mongoose完整文档http://mongoosejs.com
var personSchema = new Schema({
name: { type: String, default: 'anonymous' },
age: { type: Number, min: 18, index: true },
bio: { type: String, match: /[a-zA-Z ]/ },
date: { type: Date, default: Date.now },
});
var personModel = mongoose.model('Person', personSchema);
var comment1 = new personModel({
name: 'Witkor',
age: '29',
bio: 'Description',
});
comment1.save(function (err, comment) {
if (err) console.log(err);
else console.log('fallowing comment was saved:', comment);
});
Run Code Online (Sandbox Code Playgroud)
能够在我们的代码中设置模式和限制并不会改变MongoDB本身无模式的事实,这在某些情况下是现实的优势.这样,如果你决定对模式进行更改,但是你不需要考虑向后兼容性,只需在脚本中编辑模式就可以了.这是mongodb背后的基本思想,能够在同一集合中存储每个文档中的不同数据集.但是,总是希望在代码库逻辑中有一些限制.
| 归档时间: |
|
| 查看次数: |
29255 次 |
| 最近记录: |