热门标签 | 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增編削查


推荐阅读
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • CentOS系统安装与配置常见问题及解决方案
    本文详细介绍了在CentOS系统安装过程中遇到的常见问题及其解决方案,包括Vi编辑器的操作、图形界面的安装、网络连接故障排除等。通过本文,读者可以更好地理解和解决这些常见问题。 ... [详细]
  • 本文介绍如何使用JavaScript将当前日期时间转换为不同地区的时区,并提供详细的代码示例和解释。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • Hybrid 应用的后台接口与管理界面优化
    本文探讨了如何通过优化 Hybrid 应用的后台接口和管理界面,提升用户体验。特别是在首次加载 H5 页面时,为了减少用户等待时间和流量消耗,介绍了离线资源包的管理和分发机制。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 本文详细解析了Java中hashCode()和equals()方法的实现原理及其在哈希表结构中的应用,探讨了两者之间的关系及其实现时需要注意的问题。 ... [详细]
  • 尽管深度学习带来了广泛的应用前景,其训练通常需要强大的计算资源。然而,并非所有开发者都能负担得起高性能服务器或专用硬件。本文探讨了如何在有限的硬件条件下(如ARM CPU)高效运行深度神经网络,特别是通过选择合适的工具和框架来加速模型推理。 ... [详细]
  • 解决SVN图标显示异常问题的综合指南
    本文详细探讨了SVN图标无法正常显示的问题,并提供了多种有效的解决方案,涵盖不同环境下的具体操作步骤。通过本文,您将了解如何排查和修复这些常见的SVN图标显示故障。 ... [详细]
  • 在网站制作中随时可用的10个 HTML5 代码片段
    HTML很容易写,但创建网页时,您经常需要重复做同样的任务,如创建表单。在这篇文章中,我收集了10个超有用的HTML代码片段,有HTML5启动模板、空白图片、打电话和发短信、自动完 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 探讨在 JavaScript 中使用不同方向的 for 循环来实现跟随鼠标的 div 动画时,为什么会出现不同的视觉效果。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
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社区 版权所有