Saya mencoba mencari tanggal minimum semua dokumen dalam koleksi. Saya telah mendekati ini sejauh ini dengan fungsi sortir dan mengambil yang pertama saya temukan, lihat di sini:
earliestTime = function (kitUser) {
'use strict';
var res, earliestTime;
res = Cards.findOne({ kit: kitUser }, { fields: { created: 1 } }, { sort: { created: 1 } });
console.log('Created date: ' + res.created);
earliestTime = new Date(res.created - 20000);
console.log('Earliest time: ' + earliestTime);
return earliestTime;
};
Saya kemudian mengurangi 20 detik dari nilai yang saya temukan dan mengembalikan nilai itu ke insert
dokumen baru yang memiliki 20 detik lebih sedikit di bidang yang dibuat daripada yang paling awal saya temukan sebelumnya.
modifierObject = {};
modifierObject.created = earliestTime(kitUser);
Fungsi earliestTime
memberikan hasil yang tepat ketika saya melihat keluaran konsol:
I20160516-15:53:14.849(7)? Created date: Wed Apr 06 2016 12:00:11 GMT+0700 (ICT)
I20160516-15:53:14.849(7)? Earliest time: Wed Apr 06 2016 11:59:51 GMT+0700 (ICT)
Namun, ketika fungsi ini dipanggil 21 kali dengan beberapa operasi baca/tulis di antara setiap panggilan, setiap dokumen yang dimasukkan memiliki stempel waktu yang sama di bidang yang dibuat:
{ "_id" : "xcd3EfKfS6iLGvcsP", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "bvL3f8NHHZM8Ytdma", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "gAirEbicdWJz9CELB", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "kgAg6Jt2P89mTJYgN", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "xeqR5K2fxNmgEv4bb", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "PgPimNRxj2zBuS8M2", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "snwEWeXpn4Ampsito", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "8RCS8YQLxY7tY6Ruk", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "tEqRJs49RNvCzkMz6", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "PJnZ7Z4WH6rTTw626", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "J2L6KPhzxcva3rttJ", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "YR5R6ShakPxCXgj54", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "Ajd6D8E8WrRB47q7d", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "g5CQgjbPH7NoytyMw", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "s9NgtsiR7WbjgeKLr", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "NPtZMHkAdqySShD3a", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "XxpWREjutAjbgHyME", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "6ZsiL2ZgidWjk3cgb", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "pvXiEaJgkuHEKijbB", "created" : ISODate("2016-04-06T04:59:51.183Z") }
{ "_id" : "im4GzumrE6RARNLbe", "created" : ISODate("2016-04-06T04:59:51.183Z") }
Saya bingung bagaimana ini bisa terjadi. Hasil yang saya harapkan adalah (cap waktu):
"created" : ISODate("2016-04-06T04:59:51.183Z")
"created" : ISODate("2016-04-06T04:59:41.183Z")
"created" : ISODate("2016-04-06T04:59:31.183Z")
"created" : ISODate("2016-04-06T04:59:21.183Z")
Saya menduga ada yang salah dengan fungsi saya dengan pengurutan, maka pertanyaan saya bagaimana saya dapat lebih mudah menemukan tanggal minimum di MongoDB.
Terima kasih sebelumnya!
1 menjawab
Oke, saya menemukan kesalahan dalam proyeksi saya, baris ke-4 harus:
res = Cards.findOne({ kit: kitUser }, { fields: { created: 1 }, sort: { created: 1 } });
Saya telah mengabaikan bahwa proyeksi adalah satu objek dan oleh karena itu tanda kurung pertama harus ada di sekitar semua opsi seperti fields
dan sort
.
Artikel ini sangat membantu dalam mengidentifikasinya dan terima kasih kepada Marcel Fahle karena telah menunjukkannya:
https://themeteorchef.com/snippets/mongodb-queries-and-projections/