Heim > Web-Frontend > js-Tutorial > Fallanalyse mit Nodejs mongoose (mit Code)

Fallanalyse mit Nodejs mongoose (mit Code)

php中世界最好的语言
Freigeben: 2018-06-12 09:49:46
Original
1541 Leute haben es durchsucht

Dieses Mal werde ich Ihnen eine Fallanalyse der Verwendung von Nodejs Mungo (mit Code) vorstellen. Was sind die Vorsichtsmaßnahmen für die Verwendung von Nodejs Mungo?

Vorwort

Mongoose ist ein Objektmodelltool für den bequemen Betrieb von Mongodb in der NodeJS-Umgebung. In diesem Artikel wird das Entschlüsselungs- (Übersetzungs-) Mongoose-Plug-in vorgestellt.

Schema

Ein Schema entspricht der Sammlung von Mongodb (entspricht einer SQL-Tabelle) und definiert seine Struktur.

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//定义一个博客结构
var blogSchema = new Schema({
  title: String,
  author: String,
  body:  String,
  comments: [{ body: String, date: Date }],
  date: { type: Date, default: Date.now },
  hidden: Boolean,
  meta: {
   votes: Number,
   favs: Number
  }
 });
Nach dem Login kopieren

Verfügbare Schematypen:

.String (z. B. 'ABCD')

.Number (z. B. 123)

.Datum (z. B.: neues Datum)

.Buffer (z. B. neuer Puffer(0))

.Boolean (z. B. falsch)

.Schema.Types.Mixed (z. B. {beliebig :{thing:'ok'}})

.Schema.Types.ObjectId (ex:new mongoose.Types.ObjectID)

.Array (ex:[1,2,3] )

.Schema.Types.Decimal128

.Map (ex: new Map([['key','value']]))

Wir können a übergeben Abschnitt Code, Schema in Modell konvertieren: mongoose.model(modelName,Schema)

var Blog = mongoose.model('Blog', blogSchema);
Nach dem Login kopieren

wird der Schema-Methode zugewiesen. Wenn die Methode in Model konvertiert wird, wird die Methode Model

//创建一个变量,Schema
var animalSchema = new Schema({ name: String, type: String });
//将方法赋予这个Schema
animalSchema.methods.findSimilarTypes = function(cb) {
  return this.model('Animal').find({ type: this.type }, cb);
};
var Animal = mongoose.model('Animal', animalSchema);
var dog = new Animal({ type: 'dog' });
dog.findSimilarTypes(function(err, dogs) {
  console.log(dogs); // woof
});
Nach dem Login kopieren
in der Schema-Methode Verwenden Sie hier keine Pfeilfunktionen, die dies erneut binden.

weist Schema eine statische (statische) Methode zu, wir verwenden weiterhin das obige Beispiel:

//赋予静态方法,可以再Model不实例化的情况下调用
animalSchema.statics.findByName = function(name, cb) {
  return this.find({ name: new RegExp(name, 'i') }, cb);
};
var Animal = mongoose.model('Animal', animalSchema);
Animal.findByName('fido', function(err, animals) {
  console.log(animals);
});
Nach dem Login kopieren

Schema-Indexindex

MongoDB unterstützt Sekundärindizes. In Mongoose können wir den Index auf der Schemaebene festlegen.

var animalSchema = new Schema({
  name: String,
  type: String,
  tags: { type: [String], index: true } // 声明在字段层
});
animalSchema.index({ name: 1, type: -1 }); // 声明在
Nach dem Login kopieren
Wenn Sie einen Index (Sekundärindex) verwenden, denken Sie daran, den AutoIndex von Mongodb zu deaktivieren.

mongoose.connect('mongodb://user:pass@localhost:port/database', { autoIndex: false });
 // 或者
mongoose.createConnection('mongodb://user:pass@localhost:port/database', { autoIndex: false });
 // 或者
animalSchema.set('autoIndex', false);
 // 或者
new Schema({..}, { autoIndex: false });
Nach dem Login kopieren

Virtualisierung

// 声明一个Schema
var personSchema = new Schema({
  name: {
   first: String,
   last: String
  }
});
// 转成Model
var Person = mongoose.model('Person', personSchema);
// 实例化Model
var axl = new Person({
  name: { first: 'Axl', last: 'Rose' }
});
//1.如果我们想要打印Person的姓名
console.log(axl.name.first + ' ' + axl.name.last); // Axl Rose
//2.使用虚拟化,我们声明一个虚拟字段,然后通过get给其赋值
personSchema.virtual('fullName').get(function () {
 return this.name.first + ' ' + this.name.last;
});
console.log(axl.fullName); // Axl Rose
Nach dem Login kopieren

Alias

var personSchema = new Schema({
 n: {
  type: String,
  // 给予 n 别名 name,n与name指向同一个值
  alias: 'name'
 }
});
// 修改name同样修改n,方向一样
var person = new Person({ name: 'Val' });
console.log(person); // { n: 'Val' }
console.log(person.toObject({ virtuals: true })); // { n: 'Val', name: 'Val' }
console.log(person.name); // "Val"
person.name = 'Not Val';
console.log(person); // { n: 'Not Val' }
Model & Documents
Nach dem Login kopieren

Hinzufügen

var Tank = mongoose.model('Tank', yourSchema);
var small = new Tank({ size: 'small' });
//使用save的方法
small.save(function (err) {
 if (err) return handleError(err);
 // saved!
});
// 或者 使用create
Tank.create({ size: 'small' }, function (err, small) {
 if (err) return handleError(err);
 // saved!
});
// 或者 使用insertMany/insertOne
Tank.insertMany([{ size: 'small' }], function(err) {
});
Nach dem Login kopieren

Löschen

//deleteOne 或者 deleteMany
Tank.deleteOne({ size: 'large' }, function (err) {
 if (err) return handleError(err);
 // 只删掉符合项的第一条
});
Nach dem Login kopieren

Ändern

Tank.updateOne({ size: 'large' }, { name: 'T-90' }, function(err, res) {
});
// findOneAndUpdate 查找出相应的数据,修改,并返还给程序
Nach dem Login kopieren

Überprüfen Sie

// 查提供了多种方式,find,findById,findOne,和where
Tank.find({ size: 'small' }).where('createdDate').gt(oneYearAgo).exec(callback);
Nach dem Login kopieren
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Bitte achten Sie darauf zu anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Was sind die Vorsichtsmaßnahmen für die Verwendung von Dom mit Angular2?

So verwenden Sie den Vue+Slot-Socket in das Projekt

Das obige ist der detaillierte Inhalt vonFallanalyse mit Nodejs mongoose (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage