mongo查找数据的一些方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wnma3mz/article/details/79214210

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 } )

猜你喜欢

转载自blog.csdn.net/wnma3mz/article/details/79214210
今日推荐