摘要:连接开启你的服务首先确保你已安装了,并且配置了的环境变量。此时再进入文件夹,里面会有许多文件。创建连接新建一个任意目录最好新建一个文件夹便于管理。连接错误安装依赖包,运行此文件说明已成功连接到数据库。
连接 开启你的mongodb服务
首先确保你已安装了mongodb,并且配置了mongodb的环境变量。
在任意目录(建议在非中文目录)下新建database文件夹,在此文件夹下新建test文件夹(确保此文件夹为空的)。
然后打开cmd,输入:
mongod --dbpath "test文件夹的绝对路径———— E:database est"
waiting for connections on port 27017 说明你已经在localhost:27017端口上开启了服务。
此时再进入test文件夹,里面会有许多WT文件。
创建连接新建一个index.js(任意目录,最好新建一个mongodbDemo文件夹便于管理)。
var mongoose = require("mongoose"); mongoose.connect("mongodb://localhost/test"); var db = mongoose.connection; db.on("error",console.error.bind(console,"mongodb连接错误:")); db.once("open",function(){ console.log("mongodb connection is OK!"); });
安装mongoose依赖包,运行此文件
npm install mongoose node index.js
说明已成功连接到数据库。
写入第一条数据 Createmongoose写入数据的方法有两个,分别是Model.create()和Documents.save()[即上文的Entity];
1.在写入数据之前,先新建一个model
var CatSchema = new mongoose.Schema({ // 新建一个model对象 name: String }); var CatModel = mongoose.model("Cat", CatSchema); // 这一步才正式写入数据库,数据库对应的model名为Cat
2.插入一条数据
//Model.create CatModel.create({name: "ketty"},function(err,res){ // 第一个参数规定为错误信息 console.log(err); console.log(res); }) //promise写法 CatModel.create({ name: "kitty" }).then(res=>{console.log(res)}) // 成功返回当前数据 .catch(err=>{console.log(err)}); // Documents.save() var catDoc = new CatModel({name:"ketty"}); catDoc.save(function (err, res) { if (err)console.log(err); console.log(res); });基于Model的查询 简单查询
Model.find().then(res=>{ // 传空匹配所有 log(res); }).catch(err=>{ log(err); }); Model.find({name: "kitty"}).then(res=>{ // 匹配name为kitty的所有数据 log(res); // 若为查询到数据 res为[] }).catch(err=>{ log(err); }); Model.findOne({name: "kitty"}).then(res=>{ // 匹配name为kitty的第一条数据 log(res); // 若为查询到数据 res为null }).catch(err=>{ log(err); }); Model.findById(id).then(res=>{// 根据id查询 // tido }).catch(err=>{ // tido })
find和findOne只接受Object作为参数,如果未传参数则默认为{}。传其他数据类型都会抛出异常
条件查询“$lt” 小于
“$lte” 小于等于
“$gt” 大于
“$gte” 大于等于
“$ne” 不等于
// 查询 age 大于等于18并小于等于30的文档 Model.find({"age":{ "$get":18 , "$lte":30 } } );或查询
‘$in’ 一个键对应多个值
‘$nin’ 同上取反, 一个键不对应指定值
“$or” 多个条件匹配, 可以嵌套 $in 使用
“$not” 同上取反, 查询与特定模式不匹配的文档
// 查询 age等于20或21或21或’haha’的文档 Model.find({"age":{ "$in":[20,21,22."haha"]} } ); // 查询 age等于18 或 name等于’xueyou’ 的文档 Model.find({"$or" : [ {"age":18} , {"name":"xueyou"} ] });类型查询
"$exists" 是否存在某属性
null 能匹配自身和不存在的值, 想要匹配键的值为null, 就要通过 “$exists” 条件判定键值已经存在
// 查询 age值为null的文档 Model.find("age" : { "$in" : [null] , "exists" : true } ); //查询所有存在name属性的文档 Model.find({name: {$exists: true}}); //查询所有不存在telephone属性的文档 Model.find({telephone: {$exists: false}});正则表达式
MongoDb 使用 Prel兼容的正则表达式库来匹配正则表达式
// 查询name为 joe 的文档, 并忽略大小写 Model.find( {"name" : /joe/i } ) //查询匹配各种大小写组合 Model.find( {"name" : /joe?/i } )查询数组
‘$all’ 匹配数组中多个元素
‘$size’ 匹配数组长度
‘$slice’ 查询子集合返回
// 查询 array(数组类型)键中有10的文档, array : [1,2,3,4,5,10] 会匹配到 Model.find({"array":10} ); //查询 array(数组类型)键中下标5对应的值是10, array : [1,2,3,4,5,10] 会匹配到 Model.find({"array[5]":10} ); //查询 匹配array数组中 既有5又有10的文档 Model.find({"array":[5,10]} ); // 查询 匹配array数组长度为3 的文档 Model.find({"array":{"$size" : 3} } ); // 查询 匹配array数组的前10个元素 Model.find({"array":{"$skice" : 10} } ); //查询 匹配array数组的第5个到第10个元素 Model.find({"array":{"$skice" : [5,10] } } );Where_javacript语句查询
用$where可以执行任意javacript语句作为查询的一部分,如果回调函数返回 true 文档就作为结果的一部分返回
Model.find({"$where": function() { if (this.x !== null && this.y !== null) { return this.x + this.y === 10 ? true : false; // retrun将替代返回结果 } else { return true; } } }) Model.find( {"$where" : "this.x + this.y === 10" } ) // this指向Model Model.find( {"$where" : " function(){ return this.x + this.y ===10; } " } )联表查询
要实现联表查询需要将连接的Model的主键_id指向需要对应Model的某个属性上。使用populate进行查询
实现方法如下:
// *****************创建Model************ var cityModel= mongoose.model("city", { cityName: String, townList: [] }); var countryModel = mongoose.model("country", { country: String, cityList:[{ type: mongoose.Schema.ObjectId, ref: "city" // 将"sity"Model的主键与country的cityList对应 }] }); // ****************插入数据************************ cityModel.create({cityName:"shanghai",townList:["lujiazui"]}); cityModel.create({cityName:"guangzhou",townList:["tianhe"]}); cityModel.create({cityName:"beijing",townList:["zhaoyang"]}); var countryObj = { country:"china", cityList:[] } cityModel.find().then(res=>{ //将所有数据查出,并将对应的_id存入数组 for(let i in res){ countryObj.cityList.push(res[i]._id); } // 插入国家数据 countryModel.create(countryObj,function(err,res){ console.log(err); console.log("res" + res); }); }); // ****************查询结果********************** countryModel.find().then(res=>{ // 普通查询 console.log(res); }).catch(err=>{ console.log(err); }) /*结果为 [ { cityList: [ 5a4ded2b78110500d8b94726, 5a4ded2b78110500d8b94725, 5a4ded2b78110500d8b94727 ], _id: 5a4df149c249713348a2f546, country: "china", __v: 0 } ] */ countryModel.find({country: "china"}).populate("cityList").then(res=>{ // populate查询 console.log(res); }) /* [ { cityList: [ [Object], [Object], [Object] ], _id: 5a4df149c249713348a2f546, country: "china", __v: 0 } ] */游标
limit(3) 限制返回结果的数量
skip(3) 跳过前3个文档,返回其余的
sort( "username":1 , "age":-1 } ) 排序 键对应文档的键名, 值代表排序方向, 1 升序, -1降序
‘$inc’ 增减修改器,只对数字有效.下面的实例: 找到 age=22的文档,修改文档的age值自增1
Model.update({"age":22}, {"$inc":{"age":1}});
‘$set’ 指定一个键的值,这个键不存在就创建它.可以是任何MondoDB支持的类型.
Model.update({"age":22}, {"$set":{"age":"haha"}});
‘$unset’ 删除一个键
Model.update({‘age’:22}, {’$unset’:{‘age’:‘haha’} } );数组更新
‘$push’ 给一个键push一个数组成员,键不存在会创建
Model.update({"age":22}, {"$push":{"array":10} } );
‘$addToSet’ 向数组中添加一个元素,如果存在就不添加
Model.update({"age":22}, {"$addToSet":{"array":10} } );
‘$each’ 遍历数组, 和 $push 修改器配合可以插入多个值
Model.update({"age":22}, {"$push":{"array":{"$each": [1,2,3,4,5]}} } );
‘$pop’ 向数组中尾部删除一个元素
Model.update({"age":22}, {"$pop":{"array":1} } );
‘$pull’ 向数组中删除指定元素
Model.update({"age":22}, {"$pull":{"array":10} } );删除
Model.remove(conditions,callback); // conditions为查询条件,可参考find
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/90668.html
摘要:为安装文件,无需再配置环境变量。连接操作有以下包作者并未查到除此之外的包,但不代表没有。等于是每个默认配置的主键属性,属性名为可自己定义一个来覆盖此属性。需要注意的是,在新版本的文档中,为。通过创建限于篇幅,本小节暂时写到这里。 我的琴声呜咽,我的泪水全无。我把远方的远归还草原。 - 海子《九月》 mongodb安装 什么是Mongodb?就是一个基...
摘要:主要表现在复杂的语句事务支持等。仅支持,在等浏览器中,会出现样式布局混乱的情况。将群群对应的聊天记录保存在数据库。用户进入群聊,则将其加入到对应的中。文件大小不能超过通过模块操作登录注册将用户名作为唯一值。登录支持自动登录,将密码保存在中。 showImg(https://segmentfault.com/img/bV4jYr?w=402&h=710);showImg(https://...
摘要:注册成功后会返回注册用户的此就是上面说到的,用于用户登陆的基础,请保管好。 地址 https://github.com/billyhoomm...http://blog.billyhu.com 说明(Instructions) 本项目后台基于express、mongodb,前台基于Vue2.0全家桶、bootstrap、scss预编译器以及一众工具类插件 项目前后台代码在同一个目录中...
阅读 2820·2021-09-22 15:43
阅读 4525·2021-09-06 15:02
阅读 811·2019-08-29 13:55
阅读 1651·2019-08-29 12:58
阅读 3018·2019-08-29 12:38
阅读 1172·2019-08-26 12:20
阅读 2232·2019-08-26 12:12
阅读 3252·2019-08-23 18:35