nodejs里用的nodejs mongoose 游标去查询mongodb

nodejs对mongodb数据库的增删改查操作 -
- ITeye博客
博客分类:
首先要确保mongodb的正确安装,安装参照:
然后下载nodejs的mongodb的driver
npm install mongodb
编写一个测试的程序:
1 var mongodb = require('mongodb'); 2 var server = new mongodb.Server('localhost',27017,{auto_reconnect:true}); 3 var db = new mongodb.Db('mydb',server,{safe:true}); 4 db.open(function(err,db){ 5
if(!err) 6
console.log('connect'); 8
console.log(err);10
如果最终显示connect则说明成功。
对mongodb的collection的操作
有两种方法链接collection,分别为:
db.collection('mycoll',function(err,coll){});
db.createCollection('mycoll',function(err,coll){});
这两种方法还有第二个可选参数{safe:true},这个参数的作用对于第一种方法,如果加上了这个参数,那么当collection不存在的时候则报错,对于第二种方法,则当collection存在的时候报错
1 var mongodb = require('mongodb');
2 var server = new mongodb.Server('localhost',27017,{auto_reconnect:true}); 3 var db = new mongodb.Db('mydb',server,{safe:true}); 4 db.open(function(err,db){ 5
if(!err) 6
console.log('connect'); 8
db.collection('mycoll',{safe:true},function(err,collection){ 9
if(err){10
console.log(err);11
console.log(err);16
结果如图所示:
1 var mongodb = require('mongodb');
2 var server = new mongodb.Server('localhost',27017,{auto_reconnect:true}); 3 var db = new mongodb.Db('mydb',server,{safe:true}); 4 db.open(function(err,db){ 5
if(!err) 6
console.log('connect'); 8
db.createCollection('mycoll',{safe:true},function(err,collection){ 9
if(err){10
console.log(err);11
console.log(err);16
结果如图所示:
删除collection则使用dropCollection函数即可:
1 var mongodb = require('mongodb'); 2 var server = new mongodb.Server('localhost',27017,{auto_reconnect:true}); 3 var db = new mongodb.Db('mydb',server,{safe:true}); 4 db.open(function(err,db){ 5
if(!err) 6
console.log('connect'); 8
db.dropCollection('mycoll',{safe:true},function(err,result){ 9
console.log(result);10
console.log(err);14
结果如图所示:
对collection进行增删改查
向collection添加数据使用insert函数
1 var mongodb = require('mongodb'); 2 var server = new mongodb.Server('localhost',27017,{auto_reconnect:true}); 3 var db = new mongodb.Db('mydb',server,{safe:true}); 4 db.open(function(err,db){ 5
if(!err) 6
db.collection('mycoll',{safe:true},function(err,collection){ 8
var tmp1 = {title:'hello',number:1}; 9
collection.insert(tmp1,{safe:true},function(err,result){10
console.log(result);11
}); 12     });13
console.log(err);15
结果如图:
对数据进行更新:
1 var mongodb = require('mongodb'); 2 var server = new mongodb.Server('localhost',27017,{auto_reconnect:true}); 3 var db = new mongodb.Db('mydb',server,{safe:true}); 4 db.open(function(err,db){ 5
if(!err) 6
db.collection('mycoll',{safe:true},function(err,collection){ 8
collection.update({title:'hello'},{$set:{number:3}},{safe:true},function(err,result){ 9
console.log(result);10
console.log(err);14
}15 16 });17
结果如图所示:
对数据进行删除使用remove函数
1 var mongodb = require('mongodb'); 2 var server = new mongodb.Server('localhost',27017,{auto_reconnect:true}); 3 var db = new mongodb.Db('mydb',server,{safe:true}); 4 db.open(function(err,db){ 5
if(!err) 6
db.collection('mycoll',{safe:true},function(err,collection){ 8
collection.remove({title:'hello'},{safe:true},function(err,result){ 9
console.log(result);10
console.log(err);14
结果如图:
如果remove没有任何的参数,则删除全部。
查找操作,查找操作有两个方法一个是find,一个是findOne
1 var mongodb = require('mongodb');
2 var server = new mongodb.Server('localhost',27017,{auto_reconnect:true}); 3 var db = new mongodb.Db('mydb',server,{safe:true}); 4 db.open(function(err,db){ 5
if(!err) 6
db.collection('mycoll',{safe:true},function(err,collection){ 8
var tmp1 = {title:'hello'}; 9
var tmp2 = {title:'world'};10
collection.insert([tmp1,tmp2],{safe:true},function(err,result){11
console.log(result);12
collection.find().toArray(function(err,docs){14
console.log('find');15
console.log(docs);16
collection.findOne(function(err,doc){18
console.log('findOne');19
console.log(doc);20
浏览: 33864 次评论- 122&
&&&&&&&&&&&
数组很大多数情况下可以这样理解:每一个元素都是整个键的值.
db.users.findOne({"userName":"wyx","emails":""})能匹配到
userName: 'wyx',
MongoDB高级查询
Node+Mongoose常用查询中文文档
推荐看这三篇 mongodb的查询,以及nodejs和mongoose联用的情况
看完mongoose的基本查询就没问题了
如何在mongodb中使用索引?
MongoDB组合索引的优化
非常好的文章,将索引,排序等问题的性能优劣取舍讲的很透彻
explain方法若出现BasicCursor可以视为警告,它意味着MongoDB将对数据集做一个完全的扫描。当数据集里包含上千万条信息时,这完全是行不通的。因此要考虑加上适当的索引
常用的关键字, count, distinct, group ....
mongoose中的2中操作方法,
callback and query returned
Documents can be retrieved through several static helper methods of&.
Any&&method which&&&&&can be executed two ways:
When a&callback&function:
is passed, the operation will be executed immediately with the results passed to the callback.
is not passed, an instance of&&is returned, which provides a special&QueryBuilder&interface for you.
Let's take a look at what happens when passing a&callback:
var Person = mongoose.model('Person', yourSchema); // Query
Person.findOne({ 'name.last': 'Ghost' }, 'name occupation', function (err, person) {
if (err) return handleError(err);
console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation)
Here we see that the query was executed immediately and the results passed to our callback. All callbacks in Mongoose use the pattern:&callback(error, result). If an error occurs executing the query, the&errorparameter will contain an error document, and&result&will be null. If the query is successful, the&errorparameter will be null, and the&result&will be populated with the results of the query.
Anywhere a callback is passed to a function in Mongoose, the callback follows the patterncallback(error, results).
Now let's look at what happens when no&callback&is passed:
var query = Person.findOne({ 'name.last': 'Ghost' });
query.select('name occupation');
query.exec(function (err, person) {
if (err) return handleError(err);
console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation)
An instance of&&was returned which allows us to build up our query. Taking this example further:
.find({ occupation: /host/ })
.where('name.last').equals('Ghost')
.where('age').gt(17).lt(66)
.where('likes').in(['vaporizing', 'talking'])
.limit(10)
.sort('-occupation')
.select('name occupation')
.exec(callback);
阅读(...) 评论()利用Mongoose让JSON数据直接插入或更新到MongoDB
作者:Conan
字体:[ ] 类型:转载 时间:
这篇文章主要给大家介绍了利用Mongoose让JSON数据直接插入或更新到MongoDB数据库的相关资料,文中详细介绍了配置Mongoose、创建目录及文件、插入数据,POST提交JSON增加一条记录以及询数据,取出刚增加的记录等内容,需要的朋友可以参考下。
Nodejs基于Javascript,MongoDB脚步同样也是基于Javascript。而且他们的数据存储格式都是JSON,这就是为什么要把他们放在一起的原因了。如果程序前后端能直接处理JSON,我想数据处理过程又可以极大的减化了,代码量又将低少1/5。多么的兴奋啊!让我们来动手验证一下想法吧。
本文重点介绍web前端通过JQuery发起POST提交JSON数据,通过Mongoose直接插入或更新到MongoDB。
工程目录沿用nodejs-demo,增加/mongoose路径及对应文件。
配置Mongoose
创建目录及文件
插入数据,POST提交JSON增加一条记录
查询数据,取出刚增加的记录
1. 配置Mongoose
增加mongoose的类库
cd d:/workspace/project/nodejs-demo
npm install mongoose
D:\workspace\project\nodejs-demo\node_modules\mongoose\node_modules\mongodb\node_modu
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.InvalidPlatform.Targe
e_modules\mongodb\node_modules\bson\build\bson.vcxproj]
mongoose@3.6.10 node_modules\mongoose
├── muri@0.3.1
├── hooks@0.2.1
├── sliced@0.0.3
├── mpath@0.1.1
├── ms@0.1.0
├── mpromise@0.2.1 (sliced@0.0.4)
└── mongodb@1.3.3 (kerberos@0.0.2, bson@0.1.8)
安装时,有64位兼容性错误提示没关系,Mongoose类库安装完成。
增加models目录
mkdir models
在models目录,增加mongodb.js文件
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/nodejs');
exports.mongoose =
指定Mongo的数据库名为nodejs
2.创建目录及文件
在models目录,增加数据模型Movie.js
var mongodb = require('./mongodb');
var Schema = mongodb.mongoose.S
var MovieSchema = new Schema({
name : String,
alias : [String],
publish : Date,
create_date : { type: Date, default: Date.now},
coverSmall:String,
coverBig:String,
source :[{
source:String,
link:String,
swfLink:String,
quality:String,
version:String,
lang:String,
subtitle:String,
create_date : { type: Date, default: Date.now }
var Movie = mongodb.mongoose.model("Movie", MovieSchema);
var MovieDAO = function(){};
module.exports = new MovieDAO();
指定Mongo的数据库集为Movie
数据类型,包括了String,Date,Array,Mixed]
打开app.js增加访问路径
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, movie = require('./routes/movie')
, http = require('http')
, path = require('path')
, ejs = require('ejs')
, SessionStore = require("session-mongoose")(express);
app.get('/movie/add',movie.movieAdd);//增加
app.post('/movie/add',movie.doMovieAdd);//提交
app.get('/movie/:name',movie.movieAdd);//编辑查询
app.get('/movie/json/:name',movie.movieJSON);//JSON数据
在routes目录,增加movie.js
var Movie = require('./../models/Movie.js');
exports.movieAdd = function(req, res) {
if(req.params.name){//update
return res.render('movie', {
title:req.params.name+'|电影|管理|moive.me',
label:'编辑电影:'+req.params.name,
movie:req.params.name
return res.render('movie',{
title:'新增加|电影|管理|moive.me',
label:'新增加电影',
movie:false
exports.doMovieAdd = function(req, res) {
res.send({'success':true});
在views目录,增加movie.html
&% include header.html %&
&div class="container-fluid"&
&div class="row-fluid"&
&div class="span8"&
&fieldset&
&legend&&%=label%&&/legend&
&textarea id="c_editor" name="c_editor" class="span12" rows="10"&&/textarea&
&button id="c_save" type="button" class="btn btn-primary"&保存&/button&
&/fieldset&
&% include footer.html %&
网页效果:http://localhost:3000/movie/add
3. 插入数据,POST提交JSON增加一条记录
基础环境,都搭建好后,我们开台准备向mongodb中插入数据。
首先创建一个json数据文件,这样我们可以方便点,直接读入这个文件,创建JSON数据对象了。
在public/javascripts/目录,增加movie.json文件
"name": "未来警察",
"alias": ["Future X-Cops ","Mei loi ging chaat"],
"publish": "",
"images":{
"coverBig":"/img/movie/1_big.jpg",
"coverSmall":"/img/movie/1_small.jpg"
"source":[{
"source":"优酷",
"link":"",
"swfLink":"/player.php/sid/XMTY4NzM5ODc2/v.swf",
"quality":"高清",
"version":"正片",
"lang":"汉语",
"subtitle":"中文字幕"
"source":"搜狐",
"link":"",
"swfLink":"http://share./75837/v.swf&topBar=1&autoplay=false&plid=3860&pub_catecode=",
"quality":"高清",
"version":"正片",
"lang":"汉语",
"subtitle":"中文字幕"
在public/javascripts/目录,增加jquery.json-2.4.js类库
&script src="/javascripts/jquery-1.9.1.min.js"&&/script&
&script src="/javascripts/bootstrap.min.js"&&/script&
&script src="/javascripts/jquery.json-2.4.js"&&/script&
&script src="/javascripts/movie.js"&&/script&
在public/javascripts/目录,增加movie.js文件,作为前端脚本
$(function() {
var mdata={};
var url = '/javascripts/movie.json';
$.getJSON(url, function(data) {
render_editor_form(mdata);
render_event_form(mdata);
var render_editor_form=function(data){
$('#c_editor').val($.toJSON(data));
var render_event_form=function(){
$('#c_save').on('click',function(event){
var data = {};
data['content'] =
type: "POST",
url: '/movie/add',
data: data,
success: function (data, textStatus){
if(data.success){
$('#msg').html('成功保存!');
$('#msg').addClass('alert alert-success');
$(location).attr('href','/movie/'+mdata.name);
$('#msg').html(data.err);
$('#msg').addClass('alert alert-error');
修改views/footer.html,增加movie.js文件引用,同时增加jquery.json包
&script src="/javascripts/jquery-1.9.1.min.js"&&/script&
&script src="/javascripts/bootstrap.min.js"&&/script&
&script src="/javascripts/jquery.json-2.4.js"&&/script&
&script src="/javascripts/movie.js"&&/script&
网页效果:http://localhost:3000/movie/add
在models/Movie.js,增加save方法
MovieDAO.prototype.save = function(obj, callback) {
var instance = new Movie(obj);
instance.save(function(err){
callback(err);
在routes/movie.js,调用save方法
exports.doMovieAdd = function(req, res) {
console.log(req.body.content);
var json = req.body.
if(json._id){//update
} else {//insert
Movie.save(json, function(err){
res.send({'success':false,'err':err});
res.send({'success':true});
控制台日志
Express server listening on port 3000
{ name: '未来警察',
alias: [ 'Future X-Cops ', 'Mei loi ging chaat' ],
publish: '',
{ coverBig: '/img/movie/1_big.jpg',
coverSmall: '/img/movie/1_small.jpg' },
[ { source: '优酷',
swfLink: '/player.php/sid/XMTY4NzM5ODc2/v.swf',
quality: '高清',
version: '正片',
lang: '汉语',
subtitle: '中文字幕' },
{ source: '搜狐',
swfLink: 'http://share./75837/v.swf&topBar=1&autoplay=false&plid=3860&pub_ca
quality: '高清',
version: '正片',
lang: '汉语',
subtitle: '中文字幕' } ] }
POST /movie/add 200 57ms - 21b
数据已插入MongoDB
4. 查询数据,取出刚增加的记录
models/Movie.js,增加findByName方法
MovieDAO.prototype.findByName = function(name, callback) {
Movie.findOne({name:name}, function(err, obj){
callback(err, obj);
routes/movies.js,增加movieJSON
exports.movieJSON = function(req, res) {
Movie.findByName(req.params.name,function(err, obj){
res.send(obj);
前端javascripts/movie.js,从/movie/json/xxx处取数据
var mdata={};
var url = '/javascripts/movie.json';
var movie=$('#c_editor').attr('movie')
if(movie){
url = '/movie/json/'+
修改 views/movie.html
&textarea id="c_editor" name="c_editor" rows="10" &%= (movie?'"movie='+movie+'"':'') %&&&/textarea&
访问我们的网页
http://localhost:3000/movie/未来警察
数据从/movie/json/未来警察,处读取。完成尝试。
修改操作与插入的操作类似,我就不做演示了。
以上程序代码,大家可自行下载学习。
github地址:
本地下载:
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 nodejs安装mongoose 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信