({name:'森林'})对比相关操作符符号描述eq与指定的值相等ne与指定的值不相等gt大于指定的值gte大于等于指定的值lt小于指定的值lte小于等于指定的值in与查询数组中指定的值中的任何一个匹配...nin与查询数组中指定的值中的任何一个都不匹配Model.find({ age: { in: [18, 24]} })返回 age 字段等于 18 或者 24 的所有 document。...all匹配包含查询数组中指定的所有条件的数组字段elemMatch匹配数组字段中的某个值满足 elemMatch 中指定的所有条件size匹配数组字段的 length 与指定的大小一样的 document...{ pop: {arrayField: -1(first) / 1(last), ... } }pull移除数组字段中与查询条件匹配的所有元素 { pull: {arrayField: value /...sort修饰 在指定的位置添加元素以更新数组字段 按照指定的规则排序 限制数组大小 存储数组 options lean: true 返回普通的 js 对象,而不是 Mongoose Documents
= mongoose.model ('Course', courseSchema); //第一个参数是集合名称,第二个是集合规则。...) Course.find().then(result => console.log(result)) // 返回文档集合(数组形式) [{ _id: 5c0917ed37ec9b03c07cf95f...{ // console.log(result); // }); // 选择要查询的字段 字段前加上-表示不查询此字段 // User.find().select('name age -_id...: 默认值 获取错误信息:error.errors['字段名称'].message // 验证规则可以跟两个参数,第二个参数表示自定义错误提示信息 const postSchema = new...案例:用户信息增删改查 搭建网站服务器,实现客户端与服务器端的通信 连接数据库,创建用户集合,向集合中插入文档 当用户访问/list时, 将所有用户信息查询出来 将用户信息和表格HTML
= mongoose.model ('Course', courseSchema); //第一个参数是集合名称,第二个是集合规则。...返回文档集合(数组形式) [{ _id: 5c0917ed37ec9b03c07cf95f, name: 'node.js基础', author: 'xc-dh‘ },{ ...{ // console.log(result); // }); // 选择要查询的字段 字段前加上-表示不查询此字段 // User.find().select('name age -_id...(result); }); // 删除多个 如果条件为空,默认删除所有文档 返回一个对象,n代表删除的文档数,OK表示是否删除成功 User.deleteMany({}).then(result...: 默认值 获取错误信息:error.errors['字段名称'].message // 验证规则可以跟两个参数,第二个参数表示自定义错误提示信息 const postSchema = new
文档内嵌与引用模式 MongoDB 是一种文档对象模型,使用起来很灵活,它的文档结构分为 内嵌和引用 两种类型。...内嵌是把相关联的数据保存在同一个文档内,我们可以用对象或数组的形式来存储,这样好处是我们可以在一个单一操作内完成,可以发送较少的请求到数据库服务端,但是这种内嵌类型也是一种冗余的数据模型,会造成数据的重复...$lookup.foreignFiled: 被 Join 的集合的字段,本示例中是 Books 表的 bookId 字段。 $as: 别名,关联查询返回的这个结果起一个新的名称。...如果需要指定哪些字段返回,哪些需要过滤,可定义 $project 对象,关联查询的字段过滤可使用 别名.关联文档中的字段 进行指定。...可以在创建 Schema 时在第二个参数 options 中设置,也可以使用创建的 Schema 对象的 set 方法设置。
简介 Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考...else { console.log("Res:" + res); } }) } getByConditions(); 结果我就不展示了 第2个参数可以设置要查询输出的字段... $regex 正则,用于模糊查询 $size 匹配数组大小 $maxDistance 范围查询,距离(基于LBS) $mod 取模运算 $near 邻域查询,查询附近的位置...(基于LBS) $exists 字段是否存在 $elemMatch 匹配内数组内的元素 $within 范围查询(基于LBS) $box 范围查询,矩形范围(基于LBS)...'m'的名字,且不区分大小写,模糊查询比较常用,正则形式匹配,正则方式就是javascript正则,用到的比较多!
4.5 Schema--模式对象(约束对象) 使用 Mongoose 你必须经常定义模式。 模式为集合中的文档定义字段和字段类型。 ...Model.create(doc(s), [callback]) - 用来创建一个或多个文档并添加到数据库中 - 参数: doc(s) 可以是一个文档对象,也可以是一个文档对象的数组...查询的方法: Model.find(conditions, [projection], [options], [callback]) - 查询所有符合条件的文档,总会返回一个数组...([conditions], [projection], [options], [callback]) - 查询符合条件的第一个文档,总会返回一个具体的文档对象 参数解释: ...err) { // console.log(doc); // 通过 find() 查询的结果,返回的对象就是 Document 对象或 Document 对象数组。
result)); 返回一个数组 // 根据条件查找文档 Course.findOne({name: 'node.js基础'}).then(result => console.log(result))...返回一个对象 ?...选择要查询的字段 User.find().select('name email').then(result => console.log(result)) ?...1.5 删除文档 删除单个文档 查找到一条文档并且删除 返回删除的文档 如何查询条件匹配了多个文档那么将会删除第一个匹配的文档 User.findOneAndDelete({_id: '5c09f1e5aeb04b22f8460965...mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。
如果我们的某个字段返回不止一个标量类型的数据,而是一组,则需要使用List类型声明,在该标量类型两边使用中括号[]包围即可,与 JavaScript 中数组的写法相同,而且返回的数据也将会是数组类型。...需要注意的是[Movie]!与 [Movie!]两种写法的含义是不同的:前者表示 movies字段始终返回不可为空但Movie元素可以为空。...传入复杂结构的参数(Input) 前面的例子中,传入的参数均为标量类型,那么如果我们想传入一个拥有复杂结构的数据该怎么定义呢。答案是使用关键字input。其使用方法和type完全一致。 ?...在本例中,定义了一个Basic接口,Song以及Video类型都要实现该接口的字段。然后在search查询中返回该接口。 searchMedia查询返回一组Basic接口。...Resolver 对应着 Schema 上的字段,当请求体查询某个字段时,对应的 Resolver 函数会被执行,由 Resolver 函数负责到数据库中取得数据并返回,最终将请求体中指定的字段返回。
,并定义这个collection里的文档构成 语法: const shcema = mongoose.Schema({}) 允许使用的Schematypes有: String Boolean Date...删除 model的remove方法可以删除所有匹配查询条件(condition)的文档 Tank.remove({size:small},function(err){ if(err) return...Populate 可以自动替换 document 中的指定字段,替换内容从其他 collection 获取,我们填充(populate)单个或者多个 document、单个或者多个对象,甚至是 query...返回的一切对象: const mongoose = require('mongoose') const Schema = mongoose.Schema; const personSchema =...stories 字段为 ObjectID 数组,ref 选项告诉mongoose 在填充的时候使用哪个 model,上面的例子就是指 Story 的 model。
.find({}) 可以接受一个对象作为条件参数 {属性名1:值,属性名2:值} 查询属性是指定值的文档 db....- 商品 老师 - 学生 添加字段值为数组 11 插件操作数据库 大部分使用程序来完成数据库操作 Mongoose 让我们可以通过 Node 操作 MongoDB 模板 Mongoose 是对象文档模型...'); 如果使用默认端口号(27017),可以省略不写 监听 MongoDB 数据库的连接状态 mongoose 对象中有一个 connection 属性,表示数据库连接 通过监视该对象,可以来监听数据库的连接与断开...], [options], [callback]) 查询符合条件的第一个文档 conditions 查询条件 projection 投影 需要获取的字段 两种方式 {name: 1...查询结果结果会通过回调函数返回,参数必选,不传没有返回值 通过 find() 查询的结果,返回的对象就是 Document,文档对象 Document 对象是 Model 的实例 doc instanceof
, buildSchema() 方法需要传入的参数是字符串类型,如下面的 hero 查询字段,后面的 String 类型表示字段返回的数据类型: const schema = buildSchema(`...自定义类型查询 我们前面的查询中,已经将 hero 字段定义为 String 类型,但是常常开发中,我们又会碰到字段是多个类型,即字段也能指代对象类型(Object),比如一个 user 字段会有 name...这时候,我们可以对这个对象的字段进行次级选择(sub-selection)。...GraphQL 查询能够遍历相关对象及其字段,使得客户端可以一次请求查询大量相关数据,而不像传统 REST 架构中那样需要多次往返查询。...自定义返回类型 在实际开发中,我们返回的数据类型可能是一个对象,对象中可能既有 Int 类型的属性,也有 String 类型的值,等等,这里我们可以使用 自定义返回类型 来处理: //...省略其他 const
.find({}) 可以接受一个对象作为条件参数 {属性名1:值,属性名2:值} 查询属性是指定值的文档 db..findOne({}) 用来查询集合中符合条件的第一个文档 db....- 学生 添加字段值为数组 11 插件操作数据库 大部分使用程序来完成数据库操作 Mongoose 让我们可以通过 Node 操作 MongoDB 模板 Mongoose 是对象文档模型(ODM)库,对原生的模块进行了封装...(27017),可以省略不写 监听 MongoDB 数据库的连接状态 mongoose 对象中有一个 connection 属性,表示数据库连接 通过监视该对象,可以来监听数据库的连接与断开 mongoose.connection.once...], [options], [callback]) 查询符合条件的第一个文档 conditions 查询条件 projection 投影 需要获取的字段 两种方式 {name: 1, _id:...查询结果结果会通过回调函数返回,参数必选,不传没有返回值 通过 find() 查询的结果,返回的对象就是 Document,文档对象 Document 对象是 Model 的实例 doc instanceof
API 的查询语言,与 2015 年公开发布,是 REST API 的替代品。..., buildSchema() 方法需要传入的参数是字符串类型,如下面的 hero 查询字段,后面的 String 类型表示字段返回的数据类型: const schema = buildSchema(`...自定义类型查询 我们前面的查询中,已经将 hero 字段定义为 String 类型,但是常常开发中,我们又会碰到字段是多个类型,即字段也能指代对象类型(Object),比如一个 user 字段会有 name...自定义返回类型 在实际开发中,我们返回的数据类型可能是一个对象,对象中可能既有 Int 类型的属性,也有 String 类型的值,等等,这里我们可以使用 自定义返回类型 来处理: //...省略其他 const...字符串 对象 类名 跟在 type 字符后面,这里是 typeHero 在参数对象的 name 属性上 属性定义 定义在类型后,键值对形式 定义在参数对象 fields 属性中,值为对象,每个属性名为键名
查找数据 通过Model.find方法 不传入参数会查找该表的所有数据 该方法返回值始终是数组 第一个参数 指定数据的某个键进行查找,键也能是正则表达式 const data = await User.find...({ name: /\d/ }); 限制查找范围,通过内置的字段限制某个字段的范围,$where函数参数来指定查询的限制范围 const data = await User.find({ name...lean:将结果返回为普通的js对象而不是查询得到的Mongoose Documents类型对象 常用的内置字段: 字段 说明 $or 或关系 $nor 或关系取反 $gt 大于 $gte 大于等于...匹配数据的类型 $maxDistance 范围查询,距离(基于LBS) $mod 取模运算 $near 邻域查询,查询附近的位置(基于LBS) $exists 字段是否存在 $elemMatch 匹配内数组内的元素...查询字段集合中的元素(比如从第几个之后,第N到第M个元素 通过Model.findOne方法 该方法返回符合条件的第一条数据 通过Model.findById方法 通过每个数据的_id属性查询
('User', userSchema); // 查询用户集合中的所有文档 User.find().then(result => console.log(result)); // 通过_id字段查找文档...默认返回当前集合中的第一条文档 // User.findOne({name: '李四'}).then(result => console.log(result)) // 查询用户集合中年龄字段大于20...字段值包含足球的文档 // User.find({hobbies: {$in: ['足球']}}).then(result => console.log(result)) // 选择要查询的字段 //...('User', userSchema); // 查找到一条文档并且删除 // 返回删除的文档 // 如何查询条件匹配了多个文档 那么将会删除第一个匹配的文档 // User.findOneAndDelete...('User', userSchema); // 找到要删除的文档并且删除 // 返回是否删除成功的对象 // 如果匹配了多条文档, 只会删除匹配成功的第一条文档 // User.updateOne({
else { console.log(ret); }});删除(删)删除所有匹配条件的文档:Model.deleteMany(filter, options, callback);删除第一个匹配条件的文档...filter, projection, options, callback);查询第一个匹配条件的文档:Model.findOne(filter, projection, options, callback...表示指定返回的字段,options 表示查询选项,callback 表示回调函数。...设计 Schema 时需要指定集合(表)中每个字段的数据类型和约束条件,例如字段类型可以是 String、Number、Date、Boolean 等,约束条件可以是 required(必填项)、unique...在查询数据时,可以通过 Model 对象进行查询,例如 find() 方法查询所有数据、findOne() 方法查询单个数据等。
,根据与数据库中的“juese”字段相对比,如果角色为管理者,则功能页的内容切换为管理者的功能内容,如果角色为学生,则显示学生的页面内容。...{ // 如果找到匹配的记录,则返回所有匹配的记录 res.json({ data: results, message: "登录成功!"...// 返回查询结果 res.json({ count: count, message: "查询成功!"...const results = await qiandao.find(); if (results.length > 0) { // 如果找到匹配的记录,则返回所有匹配的记录...// 如果找到匹配的记录,则返回所有匹配的记录 res.json({ data: results, message: "签到成功!"
正文 基本语法 Model.findOneAndUpdate([(conditions, doc, [options], [callback])] conditions 第一个参数是一个对象参数,是用于查询与之相匹配的数据用的...doc 第二个参数也是一个对象参数,用于修改查询到的数据中的某条信息 options 第三个参数也是一个对象参数,主要用于设定匹配数据与更新数据的一些规定,比较复杂,一般用不到 callback...当数据库发生错误的时候传回一个err,若数据库正常,err为空;当正常根据第一个参数查询到相关数据并成功修改了我们设定的数据,data返回修改前的数据信息,若根据第一个参数没有查询到相关数据,data为...conditions,用于查询我们数据库中name为香蕉的数据 第二个参数doc, set的作用是用来指定一个键并更新键值,若键不存在并创建。...所以我们在set中设置了将我们查询到的数据的price改为10 第三个参数options,因为简单使用没用到,我就只给了个空对象 第四个参数callback, if(err) 是用于判断数据库是否发生错误
..., tags: ["热带", "甜"]}) // 插入带标签数据 // $all:查询指定字段包含所有指定内容的文档 await col.find({ tags: {$all:['热带','甜'...] } } // $elemMatch: 指定字段数组中至少有一个元素满足所有查询规则 col.insertOne({hisPrice: [20,25,30]}); // 数据准备 col.find(...也需要一个odm工具来方便更好的操作。而mongoose就是i 一个良好的工具。 mongoose是一个优雅的nodejs对象文档模型。它是由关系型数据库的思想去应用到非关系型数据库。...,find返回Query,它实现了then和catch,可以当Promise使用 // 如果需要返回Promise,调用其exec() r = await Model.find...author: String, body: String, comments: [{ body: String, date: Date }], // 定义对象数组
findOne()和find()支持以下三个参数:查询数据、可选参数、回调函数 。...(对于可选参数和回调函数都是可选项、而且这两种选项的可选值非常多,但是大部分查询只会用到一小部分的选项值) 常用的 sort(文档排序,-1倒排序,1正排序)、 Field(查询语句并返回field...这些选项值我们同样可以在mongo下使用,进行数据的一些操作 1、接下来我们来用find()查询并返回我们数据库的内容,可以直接使用toArray()方法将结果转化为数组 2、使用可选值field来进行筛选...但是需要注意的一点是,我们设置为1,也并不是只出现type字段,系统生成的唯一标识符也就是_id总是会出现在查询结果中 更新、删除文档 修改、删除文档的方法:更新文档:update() 或者是upserts...(如果不存在就添加文档),删除文档remove()、查找并修改或者删除一个文档findAndModify()、查找并删除一个文档findAndRemove() update/remove和后两个方法之间最本质的区别就在于后者两个方法都返回了被操作的文档
领取专属 10元无门槛券
手把手带您无忧上云