Mongoose의 어떤 SchemaType이 타임 스탬프에 가장 적합합니까?


86

Mongoose, MongoDB 및 Node를 사용하고 있습니다.

필드 중 하나가 date \ timestamp 인 스키마를 정의하고 싶습니다.

지난 5 분 동안 업데이트 된 모든 레코드를 반환하기 위해이 필드를 사용하고 싶습니다.

Mongoose에서는 Timestamp () 메서드를 사용할 수 없기 때문에 다음 Javascript 메서드를 사용하는 것이 유일한 옵션임을 이해합니다.

time : { type: Number, default: (new Date()).getTime() } 

방대한 DB를 쿼리하는 가장 효율적인 방법은 아닐 것입니다. 누군가가 이것을 구현하는 더 효율적인 방법을 공유 할 수 있다면 정말 감사하겠습니다.

Mongoose로 이것을 구현하고 MongoDB 타임 스탬프를 사용할 수있는 방법이 있습니까?

답변:


139

편집-2016 년 3 월 20 일

Mongoose는 이제 컬렉션에 대한 타임 스탬프를 지원 합니다.

아래 @bobbyz대답을 고려하십시오 . 아마도 이것은 당신이 찾고있는 것입니다.

원래 답변

Mongoose는 Date유형 (기본적으로 타임 스탬프)을 지원합니다.

time : { type : Date, default: Date.now }

위의 필드 정의를 사용하면 필드가 설정되지 않은 문서를 저장할 때마다 timeMongoose가이 필드를 현재 시간으로 채 웁니다.

출처 : http://mongoosejs.com/docs/guide.html


답변 해 주셔서 감사합니다.하지만 제가 이해하고자하는 것은 지난 5 분 동안 업데이트 된 모든 레코드를 반환하는 가장 좋은 방법입니다. 내가 사용해야한다는 뜻
입니까

1
@ user1103897 Date 객체를 직접 생성하고 다음과 같이 $ gt와 함께 사용할 수 있습니다. var now = new Date (); var fiveminago = new Date (now.getTime ()-5 * 60 * 1000); 그런 다음 {date : {$ gt : fiveminago}}로 쿼리
mpobrien

20
아마이어야한다 Date.now대신 Date.now().
Aleksei Zabrodskii

1
+1 elmigranto, Mongoose 문서 예제는 Date.now를 사용합니다. mongoosejs.com/docs/guide.html
Aaron

21
설명 : 객체를 만들 때 실행되는 함수 Date.now이기 때문 Date.now입니다. 파싱 ​​된 Date.now()날짜입니다 models.js. 즉, Date.now()모든 개체 를 사용 하는 경우 동일한 날짜를 가지며 그 날짜 models.js가 구문 분석됩니다.
mikemaccana

122

현재 버전의 Mongoose (v4.x)에는 스키마에 대한 기본 제공 옵션으로 타임 스탬프가 있습니다.

var mySchema = new mongoose.Schema( {name: String}, {timestamps: true} );

이 옵션 은로 타임 스탬프가 찍힌 속성을 추가 createdAt하고 모든 작업을 수행합니다. 문서를 업데이트 할 때마다 속성 이 업데이트 됩니다. 스키마 타임 스탬프 문서.updatedAtDateupdatedAt


4
감사합니다. 문서는 .NET을 사용 timestamps: true하여 이름을 재정의하는 대신 사용할 수 있는지 명확하지 않았습니다 timestamps: {...}.
tar

2
@tar 나는 그것이 여전히 작동한다고 가정하지만 4.x 문서는 구체적으로 언급하는 데 사용 timestamps: true되었으므로 앞으로 몇 가지 추가 고려 사항이 필요할 수 있습니다. (? 어쩌면 그들이 당신에게 맞아요을 비하하고, 워드 프로세서 정말이 옵션 취소되지 않습니다.)
bobbyz

19

createdAt 및 updatedAt에 대한 사용자 정의 이름을 원하는 경우

const mongoose = require('mongoose');  
const { Schema } = mongoose;

const schemaOptions = {
  timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' },
};

const mySchema = new Schema({ name: String }, schemaOptions);

1
감사합니다!!! 이것은 매우 도움이되었습니다. 문서를 검색했지만 방법을 찾을 수 없습니다. 공유해 주셔서 다시 한 번 감사드립니다.
Greg


0

지난 5 분 동안 업데이트 된 모든 레코드를 반환하기 위해이 필드를 사용하고 싶습니다.

즉, 개체를 저장할 때마다 날짜를 "지금"으로 업데이트해야합니다. 아마도 이것이 유용 할 것입니다 : Moongoose create-modified plugin


-3

첫째 : npm install mongoose-timestamp

다음: let Timestamps = require('mongoose-timestamp')

다음: let MySchema = new Schema

다음: MySchema.plugin(Timestamps)

다음 : const Collection = mongoose.model('Collection',MySchema)

그런 다음 원하는 곳 Collection.createdAt이나 Collection.updatedAt어디에서나 사용할 수 있습니다 .

만든 날짜 : 요일 월 날짜 연도 00:00:00 GMT

시간은이 형식입니다.


Mongoose에 내장되어 있으므로 플러그인 사용을 피하십시오
Simon Dragsbæk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.