mongoose 查询操作的高级应用

对于mongoose操作集合的方便之处确实不一般,但主要还是你在引用中对集合的设计,不过mongoose在使用ref关联集合的时候有限制和查出的集合的组合问题有点麻烦。不过不要紧,简单易用就行。

1.mongoose 中ref关联文档的用法

2.mongoose中populate查询关联文档

3.查询获得数组中单个集合

比如有集合:

{
    "_id": 11111,
    "im": {
        "usergroup": [
            {
                "name": "好友列表-2",
                "level": 1,
                "_id": "53c4820263256dc410e98727",
                "list": [
                    {
                        "_user": {
                            "nickname": "逐梦飞扬-2",
                            "_id": 22222,
                            "icon": "/default/heads/2.png"
                        }
                    },
                    {
                        "_user": null
                    },
                    {
                        "_user": null
                    },
                    {
                        "_user": null
                    },
                    {
                        "_user": null
                    },
                    {
                        "_user": null
                    }
                ]
            },
            {
                "_id": "53c488bf95ad1de01756db88",
                "name": "test usergroup",
                "level": 1,
                "list": []
            }
        ]
    }
}

上述的_user表示关联文档,如果你只想得到usergroup中的一个;结合条件为{‘usergroup.$‘:1}就可以得到满足条件的一个代码如下:

 UserModel.User.findOne({_id:11111,‘im.usergroup._id‘:‘53c488bf95ad1de01756db88‘},{‘im.usergroup.$‘:1})
        .populate(‘im.usergroup.list._user‘,{icon:1,nickname:1,_id:1,name:1,remark:1})
        .exec(function(err, ug){
            cb(err,ug);
        })

上述UserModel.User是用户的mongoose model

查询后可以得到:

{
    "_id": 11111,
    "im": {
        "usergroup": [
            {
                "_id": "53c488bf95ad1de01756db88",
                "name": "test usergroup",
                "level": 1,
                "list": []
            }
        ]
    }
}

mongoose 查询操作的高级应用

时间: 2024-10-13 08:41:21

mongoose 查询操作的高级应用的相关文章

Hibernate关联操作、查询操作、高级特性、并发处理机制

本文所需的数据库初始文件,Hibernate常用操作的完整示例代码(包含所有Hibernate操作所需jar文件)提供下载学习:http://download.csdn.net/detail/daijin888888/9551724 1.Hibernate关联映射 1)什么是关联映射? 如果表之间具有关联关系,Hibernate允许我们在hbm.xml中描述他们的关联关系,然后在我们操作其中一张表时,自动的根据这种关系操作到另外的关系表,那么这种关联关系的设置,我们称之为关联映射. 2)关联映射

SQLAlchemy对数据库的高级查询操作

# 高级版查询操作,厉害了哦 #老规矩 from my_create_table import User,engine from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine) db_session = Session() # 查询数据表操作 # and or from sqlalchemy.sql import and_ , or_ ret = db_session.query(User).filter(and

MongoDB各种查询操作详解

这篇文章主要介绍了MongoDB各种查询操作详解,包括比较查询.关联查询.数组查询等,需要的朋友可以参考下 一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可以实现全部和部分查询. 1.查询全部 空的查询文档{}会匹配集合的全部内容.如果不指定查询文档,默认就是{}. 2.部分查询 3.键的筛选 键的筛选是查询时只返回自己感兴趣的键值,通过指定find的第二个参数来实现.这样可以节省传输的数据量,又能节省客户端解码文档的时间和内存消耗. 查询时,数据库所关心

Redis笔记整理(三):进阶操作与高级部分

[TOC] Redis笔记整理(三):进阶操作与高级部分 Redis发布订阅 Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis客户端可以订阅任意数量的频道. 下图展示了频道channel1,以及订阅这个频道的三个客户端--client1,client2,client5之间的关系. 当有新消息通过PUBLISH命令发送给频道channel1时,这个消息就会被发送给订阅它的三个客户端: 相关操作命令如下: 命令 描述 PSUBS

part8:查询操作

查询操作是Django的ORM框架中最重要的内容之一.我们建立模型.保存数据为的就是在需要的时候可以查询得到数据.Django自动为所有的模型提供了一套完善.方便.高效的API,一些重要的,我们要背下来,一些不常用的,要有印象,使用的时候可以快速查找参考手册. 本节的内容基于如下的一个博客应用模型: from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagl

关于pgsql 的json 和jsonb 的数据查询操作笔记整理

关于pgsql 的json 和jsonb 的数据处理笔记 1. json 和jsonb 区别两者从用户操作的角度来说没有区别,区别主要是存储和读取的系统处理(预处理)和耗时方面有区别.json写入快,读取慢,jsonb写入慢,读取快. 2. 常用的操作符 操作符: -> // 右边传入整数(针对纯数组),获取数组的第n个元素,n从0开始算,返回值为json 示例: select '[{"a":"foo"},{"b":"bar&qu

数据库表的查询操作(实验二),数据库表查询实验

[实验目的]:了解SQL语言的使用,进一步理解关系运算,巩固数据库的基础知识.[实验要求]:掌握利用Select语句进行各种查询操作:单表查询.多表连接及查询.嵌套查询.集合查询等.[实验内容]一.单表查询1.简单查询打开查询分析器,根建立teacher表,并加入数据.从teacher表中分别检索出教师的所有信息,以及仅查询教工号.姓名和职称.语句如下: select * from teacher select tno, tname from teacher 如要查询时改变列标题的显示,则从te

数据库表的查询操作实践演练(实验三),数据库演练

继前两次的实验,本次实验以熟练掌握利用select语句进行各种查询操作:单表查询.多表连接及查询.嵌套查询.集合查询等,巩固数据库查询操作.下面就跟着小编一起练习吧!在实验一创建并插入数据的表(Student, Course,SC,Teacher,TC)的基础上,完成以下操作.(1)将教师‘罗莉'的名字改为‘罗莉莉'.复制代码 代码如下:update Teacher set tname='罗莉莉' where tname='罗莉'(2)将两个同学(数据自己临时设置,用后即删除)的两门课程的成绩以

Mongodb基础用法及查询操作[转载]

插入多条测试数据> for(i=1;i<=1000;i++){... db.blog.insert({"title":i,"content":"mongodb测试文章.","name":"刘"+i});                                                      ... } db.blog.list.find().limit(10).forEach(