CRUD
C: Create Operations, 创建
R: Read Operations, 读取
U: Update Operations, 更新
D: Delete Operations, 删除
mongo数据库至上而下是:Database
–>Collections
–>Documents
。我在这里分别理解成数据库、集合、记录。
这里直接用官方给的数据来操作。假设以下数据放在了fruits
集合中。
{ "_id": "apples", "qty": 5, "score": [-1, 3], "links": [{"Uin": 124, "NickName": "123"}]}
{ "_id": "bananas", "qty": 7, "score": [1, 5]}
{ "_id": "oranges", "qty": { "in stock": 8, "ordered": 12 }, "score": [5, 5] }
{ "_id": "avocados", "qty": "fourteen" , "score": [5, 5]}
基本操作
json
数据的嵌套查找,就是说,如果有字段包含json,可以直接用.
进行连接。
查找qty
中的ordered
为12的字段
db.fruits.find({"qty.ordered": 12})
多重筛选,同时满足多个要求的记录
查找qty
为5,且_id
为”apples”的记录
db.fruits.find({"qty": 5, "_id": "apples"})
第一个大括号内容表示筛选条件,第二个大括号表示显示内容
筛选条件就不说明了,第二个大括号表示打印_id
字段和score
字段,不打印其他字段,
db.fruits.find({"qty": 5}, { "_id": 1 , "score": 1})
比较
下面至上而下分别表示,在fruits
集合中查找字段qty
与4的大小关系所有记录。
db.fruits.find({"qty": 4}) # 等于
db.fruits.find({"qty": {"$gt": 4}}) # 大于
db.fruits.find({"qty": {"$lt": 4}}) # 小于
db.fruits.find({"qty": {"$gte": 4}}) # 大于等于
db.fruits.find({"qty": {"$lte": 4}}) # 小于等于
db.fruits.find({"qty": {"$ne": 4}}) # 不等于
当然,也可以两个比较符一起操作,比如下面这样。
db.fruits.find({"qty": {"$gt": 3, "$lt": 5}}) # 大于3小于5。
如果对score
这个字段使用比较,比如下面这样。
db.fruits.find({"score": {"$gt": 2, "$lt": 5}}) # 大于3小于5。
将会返回下面两条记录。理由是,字段里的数组里有含有大于2小于5的数字。
/* 1 */
{
"_id" : "apples",
"qty" : 5,
"score" : [
-1,
3
],
"links" : [
{
"Uin" : 124,
"NickName" : "123"
}
]
}
/* 2 */
{
"_id" : "bananas",
"qty" : 7,
"score" : [
1,
5
]
}
关系
$in
查找_id
字段中包含5
或者ObjectId("507c35dd8fada716c89d0013")
的记录
db.fruits.find({"_id": {"$in":[5, ObjectId("507c35dd8fada716c89d0013")] }})
$elemMatch
用于字段中含有数组,且数组中含有json
数据的的查找。
查找links
这个含有数组的字段,找出数组中Uin
等于124的记录
db.fruits.find({"links": {"$elemMatch": {"Uin": 124}}})
$slice
切片,只打印字段中数组前n个数据
筛选出记录之后,只打印记录score
字段的前1条数据
db.fruits.find({"qty": 5}, {"_id": 1, "score": {"$slice": 1}})
输出如下
/* 1 */
{
"_id" : "apples",
"score" : [
-1
]
}
$regex
使用正则表达式,更多操作请查看官方文档: $regex
找出_id
字段中所有以a开头的记录
db.fruits.find({"_id": {"$regex": "^a"}})
后缀
sort——排序
db.fruits.find().sort({"qty": 1}) # 升序
db.fruits.find().sort({"qty": -1}) # 降序
limit——限制
db.fruits.find().limit(3) # 对查询结果只输出前3个,可以加在sort后面结合使用
skip——跳过
db.fruits.find().skip(3) # 对查询结果跳过输出前3个,即不输出前3个,可以加在sort后面结合使用
count——计数
db.fruits.find().count() # 返回查询结果总数
collation——基于特定语言进行操作
没有怎么看懂,我理解的大概意思就是说,运行根据特定语言来进行查找。感觉用的不多,这里贴上官方给的例子
db.fruits.find().collation( { locale: "en_US", strength: 1 } )