[MONGODB] ObjectId가 MongoDB의 작성시에 사용
MONGODBObjectId가 MongoDB의 작성시에 사용
ObjectId가는 MongoDB의 문서에서 기본 키가 타임 스탬프를 포함 것처럼 (objectid.generation_time가 날짜 객체를 반환 호출)를 사용. 그래서 별도의 생성 타임 스탬프를 유지하는 대신이 생성 시간을 사용할 수 있습니까? 어떻게 효율적이 포함 된 타임 스탬프를 사용하여 마지막 N 항목에 대한 작성 시간 또는 쿼리를 기준으로 정렬 할 수 있습니까?
해결법
-
==============================
1.MongoDB를 ObjectId가 타임 스탬프를 포함하기 때문에 나는 가정 할 수 있습니다 일종의 '만든 날짜'로 당신이 정렬합니다 OBJECTID에 의한 경우 :
MongoDB를 ObjectId가 타임 스탬프를 포함하기 때문에 나는 가정 할 수 있습니다 일종의 '만든 날짜'로 당신이 정렬합니다 OBJECTID에 의한 경우 :
items.find.sort( [['_id', -1]] ) // get all items desc by created date.
그리고 당신은 지난 30 개 만든 항목을 원하는 경우 다음 쿼리를 사용할 수 있습니다 :
items.find.sort( [['_id', -1]] ).limit(30) // get last 30 createad items
나는 actualy 확실하지, 난 그냥 전술 한 바와 같이 _id에 의해 그 순서가 작동합니다 생각하고 있습니다. 나중에 몇 가지 테스트를 만듭니다.
최신 정보:
네, 그것은 이렇게이다. 당신이 _id로 주문하는 경우는 _id 생성 날짜별로 자동으로 순서 것이다. 나는 C #에서의 테스트, 거기에 메가 누군가의 관심을했습니다 :
public class Item { [BsonId] public ObjectId Id { get; set; } public DateTime CreatedDate { get; set; } public int Index { get; set; } } [TestMethod] public void IdSortingTest() { var server = MongoServer.Create("mongodb://localhost:27020"); var database = server.GetDatabase("tesdb"); var collection = database.GetCollection("idSortTest"); collection.RemoveAll(); for (int i = 0; i <= 500; i++) { collection.Insert(new Item() { Id = ObjectId.GenerateNewId(), CreatedDate = DateTime.Now, Index = i }); } var cursor = collection.FindAllAs<Item>(); cursor.SetSortOrder(SortBy.Descending("_id")); var itemsOrderedById = cursor.ToList(); var cursor2 = collection.FindAllAs<Item>(); cursor2.SetSortOrder(SortBy.Descending("CreatedDate")); var itemsOrderedCreatedDate = cursor.ToList(); for (int i = 0; i <= 500; i++) { Assert.AreEqual(itemsOrderedById[i].Index, itemsOrderedCreatedDate[i].Index); } }
-
==============================
2.예, 당신은 당신이 원하는 목적을 위해 BSON ObjectId가의 generation_time를 사용할 수 있습니다. 그래서,
예, 당신은 당신이 원하는 목적을 위해 BSON ObjectId가의 generation_time를 사용할 수 있습니다. 그래서,
db.collection.find().sort({ _id : -1 }).limit(10)
지난 10 개 생성 항목을 반환합니다. 내장 된 타임 스탬프 한 제 정밀도를 가지고 있기 때문에, 모든 제 내의 여러 항목들은 생성 된 순서대로 저장된다.
-
==============================
3.다음으로 C #을 드라이버와 이에 대응하는 타임 스탬프로 날짜 시간 변환하는 코드는 다음과 같습니다
다음으로 C #을 드라이버와 이에 대응하는 타임 스탬프로 날짜 시간 변환하는 코드는 다음과 같습니다
public static ObjectId ToObjectId(this DateTime dateTime) { var timestamp = (int)(dateTime - BsonConstants.UnixEpoch).TotalSeconds; return new ObjectId(timestamp, 0, 0, 0); }
여기에 더 많은 정보 : http://www.danharman.net/2011/10/26/mongodb-ninjitsu-using-objectid-as-a-timestamp/
-
==============================
4.올린 사람 : http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-DocumentTimestamps
올린 사람 : http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-DocumentTimestamps
"이 관계는 하나의 초 내의 다중 시스템에서 생성 된 값 ObjectId가 엄격하지 않지만 저장 값 OBJECTID 있다는 _id 필드 분류하면, 생성 시간에 의해 정렬과 거의 동일하다. '
-
==============================
5.보다
보다
http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-DocumentTimestamps
가능성 그러나 나는 항상 대신 어떻게 든 일부 개체 ID에 포함 된 타임 스탬프와 같은 일부 등의 내부에 의존 전용 타임 스탬프를 가진 선호 해 드리겠습니다.
-
==============================
6.7 일 이내에 생성 된 쿼리 프로젝트에, 나는 조각 아래 사용
7 일 이내에 생성 된 쿼리 프로젝트에, 나는 조각 아래 사용
db.getCollection('projects').find({ $where: function() { // last 7 days return Date.now() - this._id.getTimestamp() < (7 * 24 * 60 * 60 * 1000) } }).sort({ '_id': -1 })
당신이 지정된 필드와 아이템을 얻으려면 :
db.getCollection('projects').find({ $where: function() { // last 7 days return Date.now() - this._id.getTimestamp() < (7 * 24 * 60 * 60 * 1000) } }).sort({ '_id': -1 }).toArray().map(function(item) { var res = {}; res['Project Name'] = item.config.label; res['Author'] = item.author; res['Created At'] = item._id.getTimestamp().toLocaleDateString(); res['Last Modified Date'] = item.config.lastModifDate.toLocaleString(); return res; });
그것은 이런 식으로 뭔가를 반환합니다 :
[{ "Project Name": "Newsletter", "Author": "larry.chen", "Created At": "Thursday, January 19, 2017", "Last Modified Date": "Thursday, January 19, 2017 17:05:40" }...]
추신 : MongoDB를 연결하는 소프트웨어 I 사용은 로보 3T입니다
이 당신을 도울 것입니다 바랍니다.
from https://stackoverflow.com/questions/5125521/uses-for-mongodb-objectid-creation-time by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 몽구스 '정적'방법 대 '예'방법 (0) | 2019.12.21 |
---|---|
[MONGODB] Node.js를 _id 노드 MongoDB를 네이티브로 문서를 선택하여 MongoDB (0) | 2019.12.21 |
[MONGODB] MongoDB의 ID와 타임 스탬프를 얻기 (0) | 2019.12.21 |
[MONGODB] 이유는 MongoDB를 시작할 수 없습니다 (0) | 2019.12.21 |
[MONGODB] 왜 몽구스는 스키마와 모델 모두이 있습니까? (0) | 2019.12.21 |