您的位置:首页 > 数据库 > Mongodb

Mongodb 基本用法

2017-05-05 10:05 211 查看
SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

创建删除数据库

1.创建数据库

use DATABASE_NAME


2.查看数据库

show dbs


3.删除当前数据库

db.dropDatabase()


4.删除集合

db.collectionName.drop()


文档的CRUD操作

文档的数据结构和JSON基本一样。

所有存储在集合中的数据都是BSON格式。

BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。

1.插入文档 insert() 或 save()

db.COLLECTION_NAME.insert(document)


2.更新文档 update(),save()

update():

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 :可选,抛出异常的级别。

save() 方法通过传入的文档来替换已有文档

db.collection.save(
<document>,
{
writeConcern: <document>
}
)


document : 文档数据。

writeConcern :可选,抛出异常的级别。

3.删除文档 remove()

db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)


query :(可选)删除的文档的条件。

justOne : (可选)如果设为 true 或 1,则只删除一个文档。

writeConcern :(可选)抛出异常的级别。

4.查询文档 find()

db.collection.find(query, projection)


query :可选,使用查询操作符指定查询条件

projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)

查询条件

$lt
,
$lte
,
$gt
,
$gte
分别对应<,<=,>,>=

AND 条件

可以传入多个键(key),每个键(key)以逗号隔开

db.col.find({key1:value1, key2:value2}).pretty()


OR 条件

关键字 $or:

db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()


$type 操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

db.col.find({"title" : {$type : 2}})


limit() 和 skip() 方法

limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

db.COLLECTION_NAME.find().limit(NUMBER)


skip方法同样接受一个数字参数作为跳过的记录条数。

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)


第一个 {} 放 where 条件,为空表示返回集合中所有文档。

第二个 {} 指定那些列显示和不显示 (0表示不显示 1表示显示

db.col.find({},{"title":1,_id:0}).limit(2)


sort()方法

sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

db.COLLECTION_NAME.find().sort({KEY:1})


索引

创建索引 ensureIndex({key:0/1})

db.COLLECTION_NAME.ensureIndex({KEY:1})


Key 值为你要创建的索引字段,1为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可

ensureIndex() 接收可选参数,可选参数列表如下:

background  Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。

unique  Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.

name    string  索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。

dropDups    Boolean 在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.

sparse  Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.

expireAfterSeconds  integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。

v   index version   索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。

weights document    索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。

default_language    string  对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语

language_override   string  对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.


聚合 aggregate()

主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)


> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
"result" : [
{
"_id" : "w3cschool.cc",
"num_tutorial" : 2
},
{
"_id" : "Neo4j",
"num_tutorial" : 1
}
],
"ok" : 1
}
>


聚合的表达式:

表达式描述
$sum计算总和。
$avg计算平均值
$min获取集合中所有文档对应值得最小值。
$max获取集合中所有文档对应值得最大值
$push在结果文档中插入值到一个数组中
$addToSet在结果文档中插入值到一个数组中,但不创建副本。
$first根据资源文档的排序获取第一个文档数据。
$last根据资源文档的排序获取最后一个文档数据

聚合管道

将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。

$project
:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。

$match
:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。

$limit
:用来限制MongoDB聚合管道返回的文档数。

$skip
:在聚合管道中跳过指定数量的文档,并返回余下的文档。

$unwind
:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

$group
:将集合中的文档分组,可用于统计结果。

$sort
:将输入文档排序后输出。

$geoNear
:输出接近某一地理位置的有序文档。

$project实例

db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});


$match实例

db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );


$skip实例

db.article.aggregate(
{ $skip : 5 });


JAVA 使用 Mongodb

添加jar包

<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.2</version>
</dependency>


2.连接数据库

public static MongoDatabase getConnection(String dbName) {
return new MongoClient("localhost", 27017).getDatabase(dbName);
}

public static MongoDatabase getConnection(String userName, String password, String dbName) {
//连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
//ServerAddress()两个参数分别为 服务器地址 和 端口
ServerAddress serverAddress = new ServerAddress("localhost", 27017);
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
addrs.add(serverAddress);

//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential credential = MongoCredential.createScramSha1Credential(userName, dbName, password.toCharArray());
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(credential);

//通过连接认证获取MongoDB连接
MongoClient mongoClient = new MongoClient(addrs, credentials);

return mongoClient.getDatabase(dbName);
}


3.插入文档

@Test
public void testInsertDocument() throws Exception {
MongoCollection<Document> collection = MongoDBUtils.getConnection("hqq").getCollection("table2");

Document doc1 = new Document("x", 1);
Document doc2 = new Document("y", 2);
Document doc3 = new Document("z", 3);
List<Document> documents = Arrays.asList(doc2, doc3);

collection.insertOne(doc1);
collection.insertMany(documents);
}


4.查询文档

@Test
public void testFindDocument() throws Exception {
MongoCollection<Document> collection = MongoDBUtils.getConnection("hqq").getCollection("table2");
MongoCursor<Document> iterator = collection.find().iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}


5.更新文档

@Test
public void testUpdateDocument() throws Exception {
MongoCollection<Document> collection = MongoDBUtils.getConnection("hqq").getCollection("table2");
collection.updateOne(Filters.eq("x", 1), new Document("$set", new Document("x", 100)));
collection.updateMany(Filters.eq("x", 1), new Document("$set", new Document("x", 100)));
}


6.删除文档

@Test
public void testDeleteDocument() throws Exception {
MongoCollection<Document> collection = MongoDBUtils.getConnection("hqq").getCollection("table2");
collection.deleteOne(Filters.eq("x", 100));
collection.deleteMany(Filters.eq("x", 100));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: