热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mongoose的那些基本操縱

mongoose銜接mongodbvarmongooserequire(mongoose);vardbmongoose.createConnection(mongodb:127.0

mongoose 銜接mongodb

var mOngoose= require('mongoose');
var db = mongoose.createConnection('mongodb://127.0.0.1:27017/NodeJS');
// 鏈接毛病
db.on('error', function(error) {
console.log(error);
});

Schema 構造

var mOngooseSchema= new mongoose.Schema({
username : {type : String, default : '匿名用戶'},
title : {type : String},
content : {type : String},
time : {type : Date, default: Date.now},
age : {type : Number}
});

Schema的types

var schema = new Schema({
name: String,
binary: Buffer,
living: Boolean,
updated: { type: Date, default: Date.now },
age: { type: Number, min: 18, max: 65 },
mixed: Schema.Types.Mixed,
_someId: Schema.Types.ObjectId,
array: [],
ofString: [String],
ofNumber: [Number],
ofDates: [Date],
ofBuffer: [Buffer],
ofBoolean: [Boolean],
ofMixed: [Schema.Types.Mixed],
ofObjectId: [Schema.Types.ObjectId],
nested: {
stuff: { type: String, lowercase: true, trim: true }
}
})

增添 mongoose 實例要領,實例上運用的要領

mongooseSchema.methods.findbyusername = function(username, callback) {
return this.model('mongoose').find({username: username}, callback);
}

增添 mongoose 靜態要領,靜態要領在Model層就能夠運用

mongooseSchema.statics.findbytitle = function(title, callback) {
return this.model('mongoose').find({title: title}, callback);
}

model

var mOngooseModel= db.model('mongoose', mongooseSchema);

增添紀錄 基於 entity 操縱

var doc = {username : 'emtity_demo_username', title : 'emtity_demo_title', content : 'emtity_demo_content'};
var mOngooseEntity= new mongooseModel(doc);
mongooseEntity.save(function(error) {
if(error) {
console.log(error);
} else {
console.log('saved OK!');
}
// 封閉數據庫鏈接
db.close();
});

增添紀錄 基於model操縱

var doc = {username : 'model_demo_username', title : 'model_demo_title', content : 'model_demo_content'};
mongooseModel.create(doc, function(error){
if(error) {
console.log(error);
} else {
console.log('save ok');
}
// 封閉數據庫鏈接
db.close();
});

修正紀錄

mongooseModel.update(conditions, update, options, callback);
var cOnditions= {username : 'model_demo_username'};
var update = {$set : {age : 27, title : 'model_demo_title_update'}};
var optiOns= {upsert : true};
mongooseModel.update(conditions, update, options, function(error){
if(error) {
console.log(error);
} else {
console.log('update ok!');
}
//封閉數據庫鏈接
db.close();
});

  • update()返回數據處置懲罰條數
  • findOneAndUpdate()返回處置懲罰后的數據
  • 簡樸來講,你須要獵取數據就用findOneAndUpdate(),只須要修正數據而不關注修正後數據那就用update()

查詢

基於實例要領的查詢

var mOngooseEntity= new mongooseModel({});
mongooseEntity.findbyusername('model_demo_username', function(error, result){
if(error) {
console.log(error);
} else {
console.log(result);
}
//封閉數據庫鏈接
db.close();
});

基於靜態要領的查詢

mongooseModel.findbytitle('emtity_demo_title', function(error, result){
if(error) {
console.log(error);
} else {
console.log(result);
}
//封閉數據庫鏈接
db.close();
});

mongoose find

var criteria = {title : 'emtity_demo_title'}; // 查詢前提
var fields = {title : 1, content : 1, time : 1}; // 待返回的字段
var optiOns= {};
mongooseModel.find(criteria, fields, options, function(error, result){
if(error) {
console.log(error);
} else {
console.log(result);
}
//封閉數據庫鏈接
db.close();
});

刪除紀錄

var cOnditions= {username: 'emtity_demo_username'};
mongooseModel.remove(conditions, function(error){
if(error) {
console.log(error);
} else {
console.log('delete ok!');
}
//封閉數據庫鏈接
db.close();
});

修正器和更新器

更新修正器:

  • $inc 增減修正器,只對数字有用.下面的實例: 找到 age=22的文檔,修正文檔的age值自增1

Model.update({‘age’:22}, {’$inc’:{‘age’:1} } ); 實行后: age=23

  • $set 指定一個鍵的值,這個鍵不存在就建立它.可所以任何MondoDB支撐的範例.

Model.update({‘age’:22}, {’$set’:{‘age’:‘haha’} } ); 實行后: age=‘haha’

  • $unset 同上取反,刪除一個鍵

Model.update({‘age’:22}, {’$unset’:{‘age’:‘haha’} } ); 實行后: age鍵不存在

數組修正器:

  • $push 給一個鍵push一個數組成員,鍵不存在會建立

Model.update({‘age’:22}, {’$push’:{‘array’:10} } ); 實行后: 增添一個 array 鍵,範例為數組, 有一個成員 10

  • $addToSet 向數組中增添一個元素,假如存在就不增添

Model.update({‘age’:22}, {’$addToSet’:{‘array’:10} } ); 實行后: array中有10所以不會增添

  • $each 遍曆數組, 和 $push 修正器合營能夠插進去多個值

Model.update({‘age’:22}, {’$push’:{‘array’:{’$each’: [1,2,3,4,5]}} } ); 實行后: array : [10,1,2,3,4,5]

  • $pop 向數組中尾部刪除一個元素

Model.update({‘age’:22}, {’$pop’:{‘array’:1} } ); 實行后: array : [10,1,2,3,4] tips: 將1改成-1能夠刪除數組首部元素

  • $pull 向數組中刪除指定元素

Model.update({‘age’:22}, {’$pull’:{‘array’:10} } ); 實行后: array : [1,2,3,4] 婚配到array中的10后將其刪除

前提查詢:

  • $lt 小於
  • $lte 小於即是
  • $gt 大於
  • $gte 大於即是
  • $ne 不即是

Model.find({“age”:{ “$get”:18 , “$lte”:30 } } ); 查詢 age 大於即是18並小於即是30的文檔

或查詢 OR:

  • $in 一個鍵對應多個值
  • $nin 同上取反, 一個鍵不對應指定值
  • $or 多個前提婚配, 能夠嵌套 $in 運用
  • $not 同上取反, 查詢與特定形式不婚配的文檔

Model.find({“age”:{ “$in”:[20,21,22.‘haha’]} } ); 查詢 age即是20或21或21或’haha’的文檔

Model.find({"$or" : [ {‘age’:18} , {‘name’:‘xueyou’} ] }); 查詢 age即是18 或 name即是’xueyou’ 的文檔

範例查詢:

null 能婚配本身和不存在的值, 想要婚配鍵的值 為null, 就要經由過程 $exists前提剖斷鍵值已存在 $exists (示意是不是存在的意義)

Model.find(“age” : { “$in” : [null] , “exists” : true } ); 查詢 age值為null的文檔

Model.find({name:{$exists:true}},function(error,docs){//查詢一切存在name屬性的文檔});Model.find({telephone:{$exists:false}},function(error,docs){//查詢一切不存在telephone屬性的文檔});

正則表達式:

MongoDb 運用 Prel兼容的正則表達式庫來婚配正則表達式

find( {“name” : /joe/i } ) 查詢name為 joe 的文檔, 並疏忽大小寫
find( {“name” : /joe?/i } ) 查詢婚配種種大小寫組合

查詢數組:

Model.find({“array”:10} ); // 查詢 array(數組範例)鍵中有10的文檔, array : [1,2,3,4,5,10] 會婚配到

Model.find({“array[5]”:10} ); 查詢 array(數組範例)鍵中下標5對應的值是10, array : [1,2,3,4,5,10] 會婚配到

  • $all 婚配數組中多個元素

Model.find({“array”:[5,10]} ); 查詢 婚配array數組中 既有5又有10的文檔

  • $size 婚配數組長度

Model.find({“array”:{"$size" : 3} } ); 查詢 婚配array數組長度為3 的文檔

  • $slice 查詢子集合返回

Model.find({“array”:{"$slice" : 10} } ); 查詢 婚配array數組的前10個元素
Model.find({“array”:{"$slice" : [5,10] } } ); 查詢 婚配array數組的第5個到第10個元素

where

用它能夠實行恣意javacript語句作為查詢的一部分,假如回調函數返回 true 文檔就作為效果的一部分返回

find({"$where":function(){for(var x in this){//這個函數中的 this 就是文檔}if(this.x !==null&&this.y !==null){returnthis.x +this.y ===10?true:false;}else{returntrue;}}})

簡化版本

find( {"$where" : "this.x + this.y === 10" } )
find( {"$where" : " function(){ return this.x + this.y ===10; } " } )

游標:

  • limit(3) 限定返回效果的數目,
  • skip(3) 跳過前3個文檔,返回其他的
  • sort( {“username”:1 , “age”:-1 } )

排序 鍵對應文檔的鍵名, 值代表排序方向, 1 升序, -1降序

保留數組json

《mongoose 的那些基本操縱》

刪除多條數據

《mongoose 的那些基本操縱》

Mongoose增編削查


推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 本文总结和分析了JDK核心源码(2)中lang包下的基础知识,包括常用的对象类型包和异常类型包。在对象类型包中,介绍了Object类、String类、StringBuilder类、StringBuffer类和基本元素的包装类。在异常类型包中,介绍了Throwable类、Error类型和Exception类型。这些基础知识对于理解和使用JDK核心源码具有重要意义。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 一直没有对java中的一些图像概念进行区分,一下子区分的太多了会乱,这么先来个简单的吧:ImageIO可以把一个图片转换成Buffered ... [详细]
author-avatar
囡囡需要嗳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有