- 数据库连接
//username:password@hostname/dbname mongodb://admin:123456@localhost/
启动:
numactl --interleave=all /usr/local/mongodb/mongodb/bin/mongod --port 27017 --fork --dbpath=/usr/local/mongodb/mongodb_data/ --logpath=/usr/local/mongodb/mongodb_log/mongodb.log --logappend
关闭:
use admin;
db.shutdownServer();
http://pecl.php.net/get/mongodb-1.1.8.tgz
---
1. **db** 显示当前数据库对象或集合
2. **use dbname** 连接dbname数据库,如果没有该数据库则自动创建
3. **use dbname; db.dropDatabase()** 删除数据库
4. **show dbs** 查看所有数据库
5. **db.collection.drop()** 删除集合
---
* **插入文档**
db.col.insert({name:"菜鸟"})
db.col.insert({
title:'MongoDB',
by:'视频教程',
url:'http://www.runoob.com',
tag:['tag1','tag2','tag3'],
likes:100
})
---
* **查询**
//查看文档
db.col.find()
//方法以格式化的方式来显示
db.col.find().pretty()
//只查看一条
db.col.findOne();
//查看某几个字段
db.col.find({},{"name":1,"age":1});
* **条件查询**
操作 | 格式
---|---
等于 | {"key":"value"}
小于 | {"key":{$lt:number}}
小于等于 | {"key":{$lte:number}}
大于 | {"key":{$gt:number}}
大于等于 | {"key":{$gte:number}}
不等于 | {"key":{$ne:number}}
连用 | {"likes" : {$lt :200, $gt : 100}}
AND 条件
db.col.find({"key1":"value1","kay2":"value2"})
OR 条件
db.col.find({$or:[{"key1":"value1"},{"key2":"value2"}]})
db.col.find({$or:[{"title":"MongoDB"},{"name":"大菜鸟"}]})
AND OR 联合查询
db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
db.col.find({"title":"MongoDB",$or:[{"by":"runnoob"},{"by":"runnnnn"}]}).pretty()
按数据类型搜索
type | 数字
---|---
Double |1
String |2
Object |3
Array |4
Binary data |5
Undefined |6 已废弃。
Object id |7
Boolean |8
Date |9
Null |10
Regular Expression |11
JavaScript |13
Symbol |14
JavaScript (with scope) |15
32-bit integer |16
Timestamp |17
64-bit integer |18
Min key |255 Query with
Max key |127
db.col.find({"title" : {$type : 2}})
limit
//查询前10条
db.col.find().limit(10)
//跳过2条,查询10条
db.col.find().skip(2)
排序
1 为升序排列,而-1是用于降序排列
db.COLLECTION_NAME.find().sort({KEY:1})
聚合查询
数据
{
_id: ObjectId(7df78ad8902c)
title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by_user: 'w3cschool.cc',
url: 'http://www.w3cschool.cc',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
},
{
_id: ObjectId(7df78ad8902d)
title: 'NoSQL Overview',
description: 'No sql database is very fast',
by_user: 'w3cschool.cc',
url: 'http://www.w3cschool.cc',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 10
},
{
_id: ObjectId(7df78ad8902e)
title: 'Neo4j Overview',
description: 'Neo4j is no sql database',
by_user: 'Neo4j',
url: 'http://www.neo4j.com',
tags: ['neo4j', 'database', 'NoSQL'],
likes: 750
},
查询演示
//统计分组后,每组的数量
db.col.aggregate([{
$group:{
_id="$by_user",
num_turorial:{$sum:1}
}
}])
//分组后,统计分组数量,显示url组 $push 不过滤重复
db.col.aggregate([{
$group:{
_id:"$by_user",
count:{$sum:1},
url:{$push:"$url"}
}
}])
//分组后,,统计分组数量,显示url组 $addToSet 过滤重复 查询最大最小 likes
db.col.aggregate([{
$group:{
_id:"$by_user",
count:{$sum:1},
url:{$addToSet:"$url"},
MAX_likes:{$max:"$likes"},
MIN_likes:{$min:"$likes"}
}
}])
//获取分组后资源文档第一个文档数据
db.col.aggregate([{
$group:{
_id:"$by_user",
count:{$sum:1},
url:{$addToSet:"$url"},
MAX_likes:{$max:"$likes"},
MIN_likes:{$min:"$likes"},
first_url:{$first:"$url"},
last_url:{$last:"$url"}
}
}])
---
* **修改**
db.col.update({'name':'菜鸟'},{$set:{'name':'大菜鸟'}})
db.col.update({'title':'MongoDB'},{$set:{'by':'MongoDB教程'}})
db.col.update({'by':'MongoDB教程'},{$set:{'title':'MongoDB教程'}})
以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
db.col.update({'title':'MongoDB'},{$set:{'title':'大MongoDB'}},{multi:true})
覆盖已有文档(_id)
> db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
> query : update的查询条件,类似sql update查询内where后面的。
> update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql
> update查询内set后面的
> upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
> multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
> writeConcern :可选,抛出异常的级别。
db.col.save({
"_id" : ObjectId("57b7f2decbaaa8c6888c266c"),
"title" : "MongoDB",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "Runoob",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"NoSQL"
],
"likes" : 110
})
---
插入已有文档
> db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
> query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
writeConcern :(可选)抛出异常的级别。
---
删除已有文档
> db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)
> query :(可选)删除的文档的条件。
> justOne : (可选)如果设为 true 或 1,则只删除一个文档。
> writeConcern :(可选)抛出异常的级别。
//删除全部符合条件的数据
col.remove({'name':'runoob3'})
//只删除符合条件的第一条
col.remove({'name':'runoob3'},1)
---
索引
语法中 Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可
db.col.ensureIndex({"title":1})
db.col.ensureIndex({"title":1,"description":-1})
在后台创建索引:
db.values.ensureIndex({open: 1, close: 1}, {background: true})
---
数据存储
引用式关系
DBRef的形式:
{ $ref : , $id : , $db : }
三个字段表示的意义为:
$ref:集合名称
$id:引用的id
$db:数据库名称,可选参数
db.runoob.insert(d4)
WriteResult({ "nInserted" : 1 })db.runoob.findOne({"_id":8})
{ "_id" : 8, "uses" : "sue", "info" : DBRef("sue_info", 1) }db.runoob.findOne({"_id":8},{"info":1})
{ "_id" : 8, "info" : DBRef("sue_info", 1) }var dbRef = db.runoob.findOne({"_id":8},{"info":1})
var ref = dbRef.info
print(ref)
DBRef("sue_info", 1)db.runoob.findOne({"_id":(ref.$id)})
{
"_id" : 1,
"name" : "sue",
"age" : 19,
"type" : 1,
"status" : "P",
"favorites" : {
"artist" : "Picasso",
"food" : "pizza"
},
"finished" : [
17,
3
],
"badges" : [
"blue",
"black"
],
"points" : [
{
"points" : 85,
"bonus" : 20
},
{
"points" : 85,
"bonus" : 10
}
]
}
数据库数据为
d4={
"_id":8,
"uses":"sue",
"info":{
"$ref":"sue_info",
"$id":1
}
}
d1={
"_id" : 1,
"name" : "sue",
"age" : 19,
"type" : 1,
"status" : "P",
"favorites" : { "artist" : "Picasso", "food" : "pizza" },
"finished" : [ 17, 3 ],
"badges" : [ "blue", "black" ],
"points" : [ { "points" : 85, "bonus" : 20 }, { "points" : 85, "bonus" : 10 } ]
};
d2={
"_id" : 4,
"name" : "xi",
"age" : 34,
"type" : 2,
"status" : "D",
"favorites" : { "artist" : "Chagall", "food" : "chocolate" },
"finished" : [ 5, 11 ],
"badges" : [ "red", "black" ],
"points" : [ { "points" : 53, "bonus" : 15 }, { "points" : 51, "bonus" : 15 } ]
};
d3={
"_id" : 6,
"name" : "abc",
"age" : 43,
"type" : 1,
"status" : "A",
"favorites" : { "food" : "pizza", "artist" : "Picasso" },
"finished" : [ 18, 12 ],
"badges" : [ "black", "blue" ],
"points" : [ { "points" : 78, "bonus" : 8 }, { "points" : 57, "bonus" : 7 } ]
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章