ฉันใช้Mongoose
เวอร์ชัน 3 กับMongoDB
เวอร์ชัน 2.2 ฉันสังเกตเห็นว่า__v
เขตข้อมูลเริ่มปรากฏในMongoDB
เอกสารของฉัน มันเกี่ยวกับเวอร์ชันหรือไม่? มันใช้งานอย่างไร?
ฉันใช้Mongoose
เวอร์ชัน 3 กับMongoDB
เวอร์ชัน 2.2 ฉันสังเกตเห็นว่า__v
เขตข้อมูลเริ่มปรากฏในMongoDB
เอกสารของฉัน มันเกี่ยวกับเวอร์ชันหรือไม่? มันใช้งานอย่างไร?
คำตอบ:
จากที่นี่ :
versionKey
เป็นชุดทรัพย์สินในเอกสารแต่ละตอนแรกที่สร้างขึ้นโดยพังพอน ค่าของคีย์นี้ประกอบด้วยการแก้ไขภายในของเอกสาร ชื่อของคุณสมบัติเอกสารนี้สามารถกำหนดค่าได้__v
เริ่มต้นคือหากสิ่งนี้ขัดแย้งกับแอปพลิเคชันของคุณคุณสามารถกำหนดค่าดังนี้:
new Schema({..}, { versionKey: '_somethingElse' })
__v === 0
) หรือไม่?
query.select('-__v')
@diosney @ExplosionPills schema.pre('save', function (next) { this.increment(); next(); })
คุณจะต้องเพิ่มตัวกลางเช่นพังพอน
ฉันไม่เห็นทางออกของโทนี่ ... ดังนั้นฉันต้องจัดการเอง ...
หากคุณไม่ต้องการ version_key คุณสามารถ:
var UserSchema = new mongoose.Schema({
nickname: String,
reg_time: {type: Date, default: Date.now}
}, {
versionKey: false // You should be aware of the outcome after set to false
});
การตั้งค่า versionKey เป็น false หมายความว่าเอกสารไม่มีเวอร์ชันอีกต่อไป
นี่เป็นปัญหาหากเอกสารมีอาร์เรย์ของเอกสารย่อย หนึ่งในเอกสารย่อยสามารถลบได้ลดขนาดของอาเรย์ หลังจากนั้นการดำเนินการอื่นสามารถเข้าถึงเอกสารย่อยในอาร์เรย์ที่ตำแหน่งเดิม
เนื่องจากตอนนี้อาร์เรย์มีขนาดเล็กลงจึงอาจเข้าถึงเอกสารย่อยที่ไม่ถูกต้องในอาร์เรย์ได้โดยไม่ตั้งใจ
versionKey แก้ปัญหานี้โดยการเชื่อมโยงเอกสารกับ versionKey ซึ่ง mongoose ใช้ภายในเพื่อให้แน่ใจว่าสามารถเข้าถึงรุ่นคอลเลกชันที่ถูกต้องได้
ข้อมูลเพิ่มเติมสามารถดูได้ที่: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
resultFromMongo.toObject({ versionKey: false })
เพื่อเอาชนะค่า
schema.set('versionKey', false);
เราสามารถใช้versionKey: falseในการกำหนด Schema
'use strict';
const mongoose = require('mongoose');
export class Account extends mongoose.Schema {
constructor(manager) {
var trans = {
tran_date: Date,
particulars: String,
debit: Number,
credit: Number,
balance: Number
}
super({
account_number: Number,
account_name: String,
ifsc_code: String,
password: String,
currency: String,
balance: Number,
beneficiaries: Array,
transaction: [trans]
}, {
versionKey: false // set to false then it wont create in mongodb
});
this.pre('remove', function(next) {
manager
.getModel(BENEFICIARY_MODEL)
.remove({
_id: {
$in: this.beneficiaries
}
})
.exec();
next();
});
}
}