Home > Web Front-end > JS Tutorial > Node.js MongoDB driver Mongoose basic usage tutorial_node.js

Node.js MongoDB driver Mongoose basic usage tutorial_node.js

WBOY
Release: 2016-05-16 15:12:43
Original
1788 people have browsed it

Using mongoose allows us to better use the mongodb database without writing cumbersome business logic.

Installation

npm install mongoose
Copy after login

Initialize using
Before using mongoose, you need to install node and mongodb. The installation methods of node and mongodb are not discussed here.

 var mongoose = require("mongoose");
 var Schema = mongoose.Schema;
 var db = mongoose.connection;
 mongoose.connect('mongodb://localhost/animal');
 db.on('error', console.error);
 db.once('open', function() {
  //这里建立模式和模型
 }
Copy after login

Quick Start
In mongoose, all data is a schema, and each schema is mapped to a mongodb collection and defines the collection file structure.

 //这里建立一个动物的模式,所有动物都拥有这个模式下的所有属性
 var animalSchema = new Schema({
  name: String,
  age: Number,
 });
Copy after login

A model is a diverse constructor we define from Schema. Instances of a model can use many operations. All document creation and retrieval are handled by the model

 var animalMode = db.model('Animal', animalSchema);
Copy after login

The instance of the model is essentially a file, and we can easily create and modify such files

 var cat = new animalMode({
  name: 'catName',
  age: '7', //这里依然使用字符串,mongoose会自动转换类型
  });

 cat.save(function(err, thor) {
  if (err) return console.log(err);
  console.log(thor);
 });
 //或者可以使用create
 //cat.create(function(err, thor) {
 // if (err) return console.log(err);
 // console.log(thor);
 //});

 //执行查找
 animalMode.find(function(err, people){
  if(err) console.log(err);
  console.log(people);
 });
 //查找符合条件数据
 animalMode.findOne({title: 'catName'}, function(err, cat){
  if(err) console.log(err);
  console.log(cat);
 });

Copy after login

Schema
Data type

These are all data types in Schema, including mongoose’s custom data types

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array

Usage of each data type

 var animalMode = mongoose.model('Animal', schema);

 var cat = new animalMode;
 cat.name = 'Statue of Liberty'    //String
 cat.age = '7';        //Number
 cat.updated = new Date;      //Date
 cat.binary = new Buffer(0);     //Buffer
 cat.living = false;       //Boolean
 cat.mixed = { any: { thing: 'i want' } }; //Mixed    
 cat._someId = new mongoose.Types.ObjectId; //ObjectId
 cat.ofString.push("strings!");    //Array

Copy after login

Mixed is a mixed type customized by mongoose. Because Mixed does not define specific content, it can be used with {}. The following two definition forms are equivalent.

 var animalSchema = new Schema({any: {}});
 var animalSchema = new Schema({any: {Schema.Types.Mixed}});
Copy after login

Custom method

You can bind methods to Schema

 var animalSchema = new Schema({
  name: String,
  age: Number,
 });

 animalSchema.methods.findSimilarTypes = function (cb) {
  return this.model('Animal').find({ name: this.name }, cb);
 }

 var animalMode = db.model('Animal', animalSchema);

 cat.findSimilarTypes(function(err, cat){
  if(err) console.log(err);
  console.log(cat);
 });

Copy after login

You can also add static methods to Schema

 animalSchema.statics.findByName = function (name, cb) {
  return this.find({ name: new RegExp(name, 'i') }, cb);
 }
 var animalMode = db.model('Animal', animalSchema);

 animalMode.findByName('catName', function (err, animals) {
  console.log(animals);
 });

Copy after login

Index

We can index mongodb data. Mongodb supports secondary indexes. In order to improve data search and positioning, it is necessary to establish a composite index

 var animalSchema = new Schema({
  name: String,
  age: Number,
  tags: { age: [String], index: true } // field level
 });

 animalSchema.index({ name: 1, age: -1 }); // schema level

Copy after login

However, the establishment of this kind of index may cause significant performance impact. It is recommended to stop it in production and set the automatic indexing in setup mode to false to disable

 animalSchema.set('autoIndex', false);
 // or
 new Schema({..}, { autoIndex: false });
Copy after login

Model
C

 cat.save(function(err, thor) {
  if (err) return console.log(err);
  console.log(thor);
 });
 //或者可以使用create
 cat.create(function(err, thor) {
  if (err) return console.log(err);
  console.log(thor);
 });
Copy after login

R

//find
animalMode.find(function(err, cat){
 if (err) console.log(err);
 console.log(cat);
})

//findOne
animalMode.findOne({name: 'catName'}, function(err, cat){
 if (err) console.log(err);
 console.log(cat);
})

//findByID
//与 findOne 相同,但它接收文档的 _id 作为参数,返回单个文档。_id //可以是字符串或 ObjectId 对象。
animalMode.findById(id, function(err, adventure){
 if (err) consoel.log(err);
 console.log(adventure);
});

//where
//查询数据类型是字符串时,可支持正则
animalMode.where('age', '2').exec(function(err, cat){
 if (err) console.log(err);
 console.log(cat);
});

animalMode
 .where('age').gte(1).lte(10)
 .where('name', 'catName')
 .exec(function(err, cat){
  if (err) console.log(err);
  console.log(cat);
 });

Copy after login

U
The update function Model.update provided by the official documentation

Model.update(conditions, doc, [options], [callback])

  • conditions update conditions
  • doc updated content
  • option update option
  • safe (boolean) safe mode, default option, value is true
  • upsert (boolean) Whether to create a new document when the conditions do not match, the default value is false
  • multi (boolean) whether to update multiple files, the default value is false
  • strict (boolean) strict mode, only update one piece of data
  • overwrite (boolean) overwrite data, default is false
  • callback
  • err value returned when there is an error in updating data
  • numberAffected (I don’t know yet)
  • rawResponse Number of rows affected
animalMode.update({name: 'catName'}, {age: '6'}, {multi : true}, function(err, numberAffected, raw){
 if (err) return console.log(err);
 console.log('The number of updated documents was %d', numberAffected);
 console.log('The raw response from Mongo was ', raw);
});
Copy after login

D

animalMode.remove({age: 6}, function(err){
 if (err) console.log(err);
})
Copy after login

Others
//Return the number of documents

animalMode.count({age: 2}, function(err, cat){
 if (err) console.log(err);
 console.log(cat);
})
Copy after login

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template