本文主要是分享一些关于使用mongodb方面的问题,后续会慢慢补充。如还不了解mongodb,请快速上手《入门手册》。
1. 如何快速熟悉各种命令?
- mongo –help/ mongod --help
- db.help()/db.persons.help()
- 所有命令 db.listCommands()
- 访问网址http://localhost:28017/_commands(启动服务器添加--rest)
使用runCommand执行,可参考7.5
2. 如何处理文档的引用关系?
MongoDB 中的文档各种关系,官方推荐的思想是整存整取(内嵌文档),但如果内嵌文档在不断增加,数据量不断变大,会影响读写性能。所有引用式关系也是必要的,可通过引用文档的 id 字段来建立关系。
{
"_id":ObjectId("52ffc33cd85242f436000001"),
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin",
"address_ids": [
ObjectId("52ffc4a5d85242602e000000"),
ObjectId("52ffc4a5d85242602e000001")
]
}
var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
3. 不支持事务,是不是就不可接受?
mongodb不支持事务,但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。
4. ObjectId是个什么东东?
ObjectId 是一个12字节 BSON 类型数据,有以下格式:
- 前4个字节表示时间戳
- 接下来的3个字节是机器标识码
- 紧接的两个字节由进程id组成(PID)
- 最后三个字节是随机数。
MongoDB中存储的文档必须有一个"_id"键。这个键的值可以是任何类型的,默认是个ObjectId对象。
5. 有Int的自动增长类型吗?
MongoDB 没有像 SQL 一样有自动增长的功能,但在某些情况下,我们可能需要实现 ObjectId 自动增长功能。
db.createCollection("counters")
{
"_id":"productid",
"sequence_value": 0
}
db.counters.insert({_id:"productid",sequence_value:0})
创建函数
function getNextSequenceValue(sequenceName){
var sequenceDocument = db.counters.findAndModify(
{
query:{_id: sequenceName },
update: {$inc:{sequence_value:1}},
new:true
});
return sequenceDocument.sequence_value;
}
db.products.insert({
"_id":getNextSequenceValue("productid"),
"product_name":"Samsung S3",
"category":"mobiles"})