[MONGODB] created_at를 추가하고 필드 updated_at 스키마를 몽구스하기
MONGODBcreated_at를 추가하고 필드 updated_at 스키마를 몽구스하기
매번 새로운 MyModel에 전달할 필요없이, created_at과 몽구스 스키마 필드 updated_at 추가 할 수있는 방법이 있나요 ()가 호출?
created_at 필드는 일이 될 것입니다 및 문서가 생성 될 때에만 덧붙였다. updated_at 필드는 문서에 호출 될 때마다 저장 () 새로운 날짜로 업데이트됩니다.
내 스키마에서 이것을 시도했다,하지만 난 명시 적으로 추가하지 않는 분야는 표시되지 않습니다 :
var ItemSchema = new Schema({
name : { type: String, required: true, trim: true }
, created_at : { type: Date, required: true, default: Date.now }
});
해결법
-
==============================
1.() 사용 업데이트 () 또는 findOneAndUpdate하는 경우
() 사용 업데이트 () 또는 findOneAndUpdate하는 경우
옵션 : {사실 upsert}와
당신은 $ setOnInsert을 사용할 수 있습니다
var update = { updatedAt: new Date(), $setOnInsert: { createdAt: new Date() } };
-
==============================
2.UPDATE : (5 년 이상)
UPDATE : (5 년 이상)
UPDATE : (4 년 후)
당신이 (보통의 경우 인) 당신의 _id 필드로 ObjectId가를 사용하는 경우, 당신이 할 필요가있다 :
let document = { updatedAt: new Date(), }
_id 필드에서 생성 된 타임 스탬프를 얻는 방법에 아래에있는 내 원래의 대답을 확인하십시오. 외부 시스템에서 ID를 사용해야하는 경우, 다음 로마 Rhrn 네 스테 로프의 답변을 확인합니다.
UPDATE : (2.5 년 이상)
이제 몽구스 버전> = 4.0로 #timestamps 옵션을 사용할 수 있습니다.
let ItemSchema = new Schema({ name: { type: String, required: true, trim: true } }, { timestamps: true });
세트 타임 스탬프 경우, 스키마에 대한 몽구스 양수인 createdAt 및 updatedAt 필드는 할당 된 유형은 날짜입니다.
또한 소인 필드의 이름을 지정할 수 있습니다 :
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
ORIGINAL 답변 :
당신이 당신의 신원 필드로 ObjectId가를 사용하는 경우는 created_at 필드가 필요하지 않습니다. 하며 Object가 getTimestamp라는 방법을 ().
ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp()
이것은 다음과 같은 출력을 반환합니다 :
ISODate("2012-10-15T21:26:17Z")
나는 몽고 OBJECTID의 생성 날짜를 추출하려면 어떻게 여기에 더 많은 정보
당신이 이것을 사용할 필요가 필드 updated_at 추가하려면 :
var ArticleSchema = new Schema({ updated_at: { type: Date } // rest of the fields go here }); ArticleSchema.pre('save', function(next) { this.updated_at = Date.now(); next(); });
-
==============================
3.이것은 내가하고 결국 무엇을 :
이것은 내가하고 결국 무엇을 :
var ItemSchema = new Schema({ name : { type: String, required: true, trim: true } , created_at : { type: Date } , updated_at : { type: Date } }); ItemSchema.pre('save', function(next){ now = new Date(); this.updated_at = now; if ( !this.created_at ) { this.created_at = now; } next(); });
-
==============================
4.당신의 스키마에 내장 된 타임 스탬프 옵션을 사용합니다.
당신의 스키마에 내장 된 타임 스탬프 옵션을 사용합니다.
var ItemSchema = new Schema({ name: { type: String, required: true, trim: true } }, { timestamps: true });
이것은 자동으로 스키마에 createdAt 및 updatedAt 필드를 추가합니다.
http://mongoosejs.com/docs/guide.html#timestamps
-
==============================
5.몽구스 4.0으로 이제 몽구스가 당신을 위해이 문제를 해결할 가지고있는 스키마에 타임 스탬프 옵션을 설정할 수 있습니다 :
몽구스 4.0으로 이제 몽구스가 당신을 위해이 문제를 해결할 가지고있는 스키마에 타임 스탬프 옵션을 설정할 수 있습니다 :
var thingSchema = new Schema({..}, { timestamps: true });
당신은 너무처럼 사용할 필드의 이름을 변경할 수 있습니다 :
var thingSchema = new Schema({..}, { timestamps: { createdAt: 'created_at' } });
http://mongoosejs.com/docs/guide.html#timestamps
-
==============================
6.다음 createdAt 및 updatedAt 당신을 위해 자동 생성이 같은 스키마에 타임 스탬프를 추가
다음 createdAt 및 updatedAt 당신을 위해 자동 생성이 같은 스키마에 타임 스탬프를 추가
var UserSchema = new Schema({ email: String, views: { type: Number, default: 0 }, status: Boolean }, { timestamps: {} });
또한 변경할 수 createdAt -> created_at에 의해
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
-
==============================
7.이것은 내가 만든 업데이트 한 달성하는 방법이다.
이것은 내가 만든 업데이트 한 달성하는 방법이다.
내 스키마 내부 내가 작성과 같이 업데이트 추가 :
/** * Article Schema */ var ArticleSchema = new Schema({ created: { type: Date, default: Date.now }, updated: { type: Date, default: Date.now }, title: { type: String, default: '', trim: true, required: 'Title cannot be blank' }, content: { type: String, default: '', trim: true }, user: { type: Schema.ObjectId, ref: 'User' } });
그런 다음 문서 컨트롤러 안에 내 문서 업데이트 방법에 내가 추가 :
/** * Update a article */ exports.update = function(req, res) { var article = req.article; article = _.extend(article, req.body); article.set("updated", Date.now()); article.save(function(err) { if (err) { return res.status(400).send({ message: errorHandler.getErrorMessage(err) }); } else { res.json(article); } }); };
굵은 부분은 관심있는 부분입니다.
-
==============================
8.
var ItemSchema = new Schema({ name : { type: String, required: true, trim: true } }); ItemSchema.set('timestamps', true); // this will add createdAt and updatedAt timestamps
문서 도구 : https://mongoosejs.com/docs/guide.html#timestamps
-
==============================
9.당신은 어떤 스키마에이 동작을 추가 할 수 몽구스 - 병력의 타임 스탬프 플러그인을 사용할 수 있습니다.
당신은 어떤 스키마에이 동작을 추가 할 수 몽구스 - 병력의 타임 스탬프 플러그인을 사용할 수 있습니다.
-
==============================
10.당신은 아주 쉽게이 플러그인을 사용할 수 있습니다. 워드 프로세서 :
당신은 아주 쉽게이 플러그인을 사용할 수 있습니다. 워드 프로세서 :
var timestamps = require('mongoose-timestamp'); var UserSchema = new Schema({ username: String }); UserSchema.plugin(timestamps); mongoose.model('User', UserSchema); var User = mongoose.model('User', UserSchema)
원하는 경우 또한 필드의 이름을 설정 :
mongoose.plugin(timestamps, { createdAt: 'created_at', updatedAt: 'updated_at' });
-
==============================
11.우리는 또한 스키마 플러그인을 사용하여이를 달성 할 수있다.
우리는 또한 스키마 플러그인을 사용하여이를 달성 할 수있다.
도우미에서 / schemaPlugin.js 파일
module.exports = function(schema) { var updateDate = function(next){ var self = this; self.updated_at = new Date(); if ( !self.created_at ) { self.created_at = now; } next() }; // update date for bellow 4 methods schema.pre('save', updateDate) .pre('update', updateDate) .pre('findOneAndUpdate', updateDate) .pre('findByIdAndUpdate', updateDate); };
및 모델 / ItemSchema.js 파일 :
var mongoose = require('mongoose'), Schema = mongoose.Schema, SchemaPlugin = require('../helpers/schemaPlugin'); var ItemSchema = new Schema({ name : { type: String, required: true, trim: true }, created_at : { type: Date }, updated_at : { type: Date } }); ItemSchema.plugin(SchemaPlugin); module.exports = mongoose.model('Item', ItemSchema);
-
==============================
12.내 몽구스 버전은 4.10.2입니다
내 몽구스 버전은 4.10.2입니다
findOneAndUpdate 작업은 후크 것 같다
ModelSchema.pre('findOneAndUpdate', function(next) { // console.log('pre findOneAndUpdate ....') this.update({},{ $set: { updatedAt: new Date() } }); next() })
-
==============================
13.계산 된 기본 값을 반환하는 함수를 사용합니다 :
계산 된 기본 값을 반환하는 함수를 사용합니다 :
var ItemSchema = new Schema({ name: { type: String, required: true, trim: true }, created_at: { type: Date, default: function(){ return Date.now(); } }, updated_at: { type: Date, default: function(){ return Date.now(); } } }); ItemSchema.pre('save', function(done) { this.updated_at = Date.now(); done(); });
-
==============================
14.
const mongoose = require('mongoose'); const config = require('config'); const util = require('util'); const Schema = mongoose.Schema; const BaseSchema = function(obj, options) { if (typeof(options) == 'undefined') { options = {}; } if (typeof(options['timestamps']) == 'undefined') { options['timestamps'] = true; } Schema.apply(this, [obj, options]); }; util.inherits(BaseSchema, Schema); var testSchema = new BaseSchema({ jsonObject: { type: Object } , stringVar : { type: String } });
모든 테이블에서이 옵션을 포함 할 필요가 없도록 지금 당신은이를 사용할 수 있습니다
-
==============================
15.사실 난 뒤에 이렇게
사실 난 뒤에 이렇게
모든 업데이트와 잘 어울리는 경우 :
// All ifs passed successfully. Moving on the Model.save Model.lastUpdated = Date.now(); // <------ Now! Model.save(function (err, result) { if (err) { return res.status(500).json({ title: 'An error occured', error: err }); } res.status(200).json({ message: 'Model Updated', obj: result }); });
-
==============================
16.사용 machinepack - 날짜는 날짜를 포맷합니다.
사용 machinepack - 날짜는 날짜를 포맷합니다.
tutorialSchema.virtual('createdOn').get(function () { const DateTime = require('machinepack-datetime'); let timeAgoString = ""; try { timeAgoString = DateTime.timeFrom({ toWhen: DateTime.parse({ datetime: this.createdAt }).execSync(), fromWhen: new Date().getTime() }).execSync(); } catch(err) { console.log('error getting createdon', err); } return timeAgoString; // a second ago });
기계 팩은 명시 적 또는 일반 자바 스크립트의 세계와는 달리 명확한 API에 아주 좋습니다.
-
==============================
17.당신은 미들웨어 및 virtuals에 사용할 수 있습니다. 여기 updated_at 필드에 대한 예입니다 :
당신은 미들웨어 및 virtuals에 사용할 수 있습니다. 여기 updated_at 필드에 대한 예입니다 :
ItemSchema.virtual('name').set(function (name) { this.updated_at = Date.now; return name; });
from https://stackoverflow.com/questions/12669615/add-created-at-and-updated-at-fields-to-mongoose-schemas by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 집계 방법 : 총 기록을 계산 얻을? (0) | 2019.12.04 |
---|---|
[MONGODB] 어떻게 날짜 형식으로 텍스트에서 MongoDB를에 속성을 변환합니까? (0) | 2019.12.04 |
[MONGODB] MongoDB를 / 몽구스 findMany - 배열에 나열된 ID를 가진 모든 문서를 찾을 수 (0) | 2019.12.04 |
[MONGODB] 각 문서의 추가 필드와 반응성 게시 구축 (0) | 2019.12.04 |
[MONGODB] MongoDB를 : 여러 기준에 배열에서 찾기 값 (0) | 2019.12.04 |