场景1 获取6条随机的文章数据,并且指定一些需求的字段返回,不是全部返回:(aggregate,project) router.get("/randomBooks", async (ctx) => {...; const book = mongoose.model("book"); await book .aggregate() .project({ ID: 1, img: 1, ... .catch((err) => { ctx.body = { code: 500, message: err }; }); }); 场景2 文章列表,但是之前把文章的内容字段也加上了...,列表不需要着字段 所以去掉(find) await book .find( { visible: true }, { ID: 1, date: 1, img: 1,
你也可以设定虚拟值的 setter ,下例中,当你赋值到虚拟值时,它可以自动拆分到其他属性: personSchema.virtual('fullName')....v.indexOf(' ') + 1); }); axl.fullName = 'William Rose'; // Now `axl.name.first` is "William" 再次强调,虚拟值不能用于查询和字段选择...,因为虚拟值不储存于 MongoDB。...如果想更新单独一条文档并且返回给应用层,可以使用 findOneAndUpdate 方法。 六、文档-Documents Mongoose document代表着MongoDB文档的一对一映射。...返回的一切对象: const mongoose = require('mongoose') const Schema = mongoose.Schema; const personSchema =
$lookup.foreignFiled: 被 Join 的集合的字段,本示例中是 Books 表的 bookId 字段。 $as: 别名,关联查询返回的这个结果起一个新的名称。...如果需要指定哪些字段返回,哪些需要过滤,可定义 $project 对象,关联查询的字段过滤可使用 别名.关联文档中的字段 进行指定。...': 0, 'authorId': 1, 'name': 1, 'bookList.bookId': 1, // 指定 books 表的 bookId 字段返回...Virtual 和 populate 实现 Mongoose 的 populate 方法默认情况下是指向的要关联的集合的 _id 字段,并且在 populate 方法里无法更改的,但是在 Mongoose...另外一种是 Mongoose 提供的 populate 方法,这种方式写起来,代码会更简洁些,这里需要注意如果关联的字段是非 _id 字段,一定要在 Schema 中设置虚拟值填充,否则 populate
两种方式: 第一种,在配置文件里加入如下配置: spring: jackson: default-property-inclusion: non_...
// 根据条件查找文档 Course.findOne({name: 'node.js基础'}).then(result => console.log(result)) // 返回文档 只返回一条,默认返回第一条...字段前加上-表示不查询此字段 // User.find().select('name age -_id').then(result => { // console.log(result);...验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败则插入失败。...: 默认值 获取错误信息:error.errors['字段名称'].message // 验证规则可以跟两个参数,第二个参数表示自定义错误提示信息 const postSchema = new...mongoose.Schema({ title: { type: String, // 必传字段,不传就会报错 required: [true,
get: 函数,使用 Object.defineProperty() 定义自定义 getter set: 函数,使用 Object.defineProperty() 定义自定义 setter alias...定义一个具有给定名称的虚拟属性,该名称可以获取/设置这个路径 索引 你可以用 schema 类型选项声明 MongoDB 的索引。 index: 布尔值,是否在属性中定义一个索引。...sort修饰 在指定的位置添加元素以更新数组字段 按照指定的规则排序 限制数组大小 存储数组 options lean: true 返回普通的 js 对象,而不是 Mongoose Documents...new: 布尔值,true 返回更新后的数据,false (默认)返回更新前的数据。 fields/select:指定返回的字段。...返回字段选择 如果只需要填充 document 中一部分字段,可给 populate() 传入第二个参数,参数形式即 返回字段字符串,同 Query.prototype.select()。
5、mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。...‘html’, ‘css’, ‘javascript’, ‘node.js’] trim: true 去除字符串两边的空格 validate: 自定义验证器 default: 默认值 获取错误信息:error.errors...[‘字段名称’].message // 引入mongoose第三方模块 用来操作数据库 const mongoose = require('mongoose'); // 数据库连接 mongoose.connect...author: { type: String, validate: { validator: v => { // 返回布尔值...验证失败 // v 要验证的值 return v && v.length > 4 }, // 自定义错误信息
// User.find({_id: '5c09f267aeb04b22f8460968'}).then(result => console.log(result)) // findOne方法返回一条文档...默认返回当前集合中的第一条文档 // User.findOne({name: '李四'}).then(result => console.log(result)) // 查询用户集合中年龄字段大于20...('User', userSchema); // 查找到一条文档并且删除 // 返回删除的文档 // 如何查询条件匹配了多个文档 那么将会删除第一个匹配的文档 // User.findOneAndDelete...('User', userSchema); // 找到要删除的文档并且删除 // 返回是否删除成功的对象 // 如果匹配了多条文档, 只会删除匹配成功的第一条文档 // User.updateOne({...// true 验证成功 // false 验证失败 // v 要验证的值 return v && v.length > 4 }, // 自定义错误信息 message: '传入的值不符合验证规则
初始化项目 bash 1mkdir -p mongoose-model 2cd mongoose-model 3npm init -y 4npm i mongoose 5touch index.js COPY...js 1const mongoose = require("mongoose"); 2mongoose.connect("mongodb://127.0.0.1:27017/moogose-model-demo...对 Post 加入分类字段与之关联。...5d3061bb5617a5750523af66, 12 title: '第2篇帖子', 13 __v: 22 14} COPY 使用分类模型反查文章 因为分类模型中不存在对 Post 的记录所以查询的时候要建立虚拟字段...js 1CategorySchema.virtual("posts", { 2 // 定义一个虚拟字段 3 ref: "Post", // 关联的模型 4 localField: "_id", /
返回一个对象 ?...mongoose验证 在创建集合规则时,可以设置当前字段的验证规则,验证失败就则输入插入失败。...100 enum: ['html', 'css', 'javascript', 'node.js'] trim: true 去除字符串两边的空格 validate: 自定义验证器...default: 默认值 获取错误信息:error.errors['字段名称'].message // 创建集合规则 const postSchema = new mongoose.Schema(...验证失败 // v 要验证的值 return v && v.length > 4 }, // 自定义错误信息
MongoDB在3.2以上的版本有类似于 join 的 $lookup 聚合操作符,其实 Mongoose 有一个更强大的替代方法,叫做populate ( ),它允许你在其他集合中引用文档,实现更简洁优雅的查询操作...定义文章分类的schema生成模型导出,文件名 aritcleCate.js // 引入自定义的数据库连接文件 var mongoose=require('....定义用户的schema生成模型导出,文件名 user.js // 引入自定义的数据库连接文件 var mongoose = require('....定义文章的 schema 生成模型导出,文件名 article.js 通过给 schema 中的关联字段添加 ref 与指定的模型建立关联 // 引入自定义的数据库连接文件 var mongoose =...'cid').populate('author_id').exec(function(err,docs){ console.log(docs); }) 通过给 populate 中传入所关联的字段与指定的集合进行关联查询
,后面的 String 类型表示字段返回的数据类型: const schema = buildSchema(` type Query { hero: String } `...自定义类型查询 我们前面的查询中,已经将 hero 字段定义为 String 类型,但是常常开发中,我们又会碰到字段是多个类型,即字段也能指代对象类型(Object),比如一个 user 字段会有 name...、 age 等字段,而 name 返回字符串类型, age 返回数值类型。...自定义返回类型 在实际开发中,我们返回的数据类型可能是一个对象,对象中可能既有 Int 类型的属性,也有 String 类型的值,等等,这里我们可以使用 自定义返回类型 来处理: //...省略其他 const...当我们要做修改操作,需要用到的是 Mutation : type Mutation { createHero(heroName: String): String } 如果 Mutation 中字段的形参是自定义类型
自定义修饰符 1. set 设置数据,会将修饰过的数据处理入库。 2. get 获取实例数据时修饰,不会影响入库的数据,使用较少。 3....预定义修饰符与自定义修饰符 set 实例(常用) 连接数据库,文件名为db.js var mongoose = require('mongoose'); mongoose.connect('mongodb...; 定义schema、生成模型,文件名为focus.js // 引入自定义模块化的数据库连接 var mongoose = require('....// 对title字段去掉前后的空格 trim: true }, pic: String, redirect: { type: String,...自定义修饰符 get 实例(不常用) 连接数据库,文件名为db.js var mongoose = require('mongoose'); mongoose.connect('mongodb://127.0.0.1
3、查找文档 // 根据条件查找文档(条件为空则查找所有文档) Course.find().then(result => console.log(result)) // 返回文档集合 [{...wuyuxin‘ }] // 根据条件查找文档 Course.findOne({name: 'node.js基础'}).then(result => console.log(result)) 1 2 // 返回文档...第三方模块 用来操作数据库 const mongoose = require('mongoose'); // 数据库连接 mongoose.connect('mongodb://localhost/playground...// User.find({_id: '5c09f267aeb04b22f8460968'}).then(result => console.log(result)) // findOne方法返回一条文档...默认返回当前集合中的第一条文档 // User.findOne({name: '李四'}).then(result => console.log(result)) // 查询用户集合中年龄字段大于20
首先是字段,字段请求的是一个数据单元。同时在 GraphQL 中,标量字段是粒度最细的一个数据单元了,同时作为返回 JSON 响应数据中的最后一个字段。...两种写法的含义是不同的:前者表示 movies字段始终返回不可为空但Movie元素可以为空。后者表示movies中返回的 Movie 元素不能为空,但 movies字段的返回是可以为空的。...别名即为返回字段使用另一个名字,使用方法也很简单,只需要在请求体的字段前面使用别名:的形式即可,返回的数据将会自动替换为该名称。 ?...定义片段使用 fragment name on Type 的语法,其中 name为自定义的片段名称,Type为片段来自的类型。...Resolver 对应着 Schema 上的字段,当请求体查询某个字段时,对应的 Resolver 函数会被执行,由 Resolver 函数负责到数据库中取得数据并返回,最终将请求体中指定的字段返回。
当然,你也可以自定义Schema.Type,只有满足Schema.Type的类型才能定义在Schema内。...//找到所有名字叫krouky的人 }); 2.3 索引 索引或者复合索引能让搜索更加高效,默认索引就是主键索引ObjectId,属性名为_id, 索引会作为一个专题来讲解 2.4 虚拟属性...Schema中如果定义了虚拟属性,那么该属性将不写入数据库,例如: var PersonSchema = new Schema({ name:{ first:String...}); 如果每次想使用全名就得这样 console.log(krouky.name.first + ' ' + krouky.name.last); 显然这是很麻烦的,我们可以定义虚拟属性...query,query没有执行的预编译查询语句,该query对象执行的方法都将返回自己,只有在执行exec方法时才执行查询,而且必须有回调。
3、选择自定义安装 ? 4、选择安装目录 ? 5、点击安装 ? 6、安装过程中 ? 7、安装完成 ? 8、MongoDB 的安装目录结构 ?...一般会在数据中增加一个字段,来表示数据是否被删除。...;-1 表示降序显示该字段的数据,0 表示不显示该字段的数据。...4.5 Schema--模式对象(约束对象) 使用 Mongoose 你必须经常定义模式。 模式为集合中的文档定义字段和字段类型。 ...简单来说,模式就是对文档的约束,有了模式,文档中的字段必须符合模式的规定。否则将不能正常操作。
width('100%') .height('100%') } } App_one.ets(具体功能页) 根据上一个登录页面的跳转,该页面拿到跳转传递过来的参数,根据与数据库中的“juese”字段相对比...const mongoose = require('mongoose') //连接mongodb数据库 mongoose.connect("mongodb://localhost:27017/DoList...qiandao, } index.js 后端主入口程序,引用自定义组件进行进一步的模块封装。...router.get("/count/student", async (req, res) => { try { // 使用 countDocuments 查询 juese 字段为...router.get("/count/student_ok", async (req, res) => { try { // 使用 countDocuments 查询 juese 字段为
领取专属 10元无门槛券
手把手带您无忧上云