İlk olarak, mongodb için oldukça yeni. İşte benim sorum şu ki bir çözüm bulamadım.Tüm Mongo koleksiyonlarına gidin ve sorguyu çalıştırın
Diyelim ki 3 farklı koleksiyonum var.
mongos> show collections
collectionA
collectionB
collectionC
Ben bu veritabanındaki ind tüm koleksiyonları üzerinde dolaşır bir komut dosyası oluşturmak ve bu koleksiyonların her geçen sokulan zaman damgası bulmak istiyorum. Burada mongosun içinde ne var.
var last_element = db.collectionA.find().sort({_id:-1}).limit(1);
printjson(last_element.next()._id.getTimestamp());
ISODate("2014-08-28T06:45:47Z")
1. Sorunu (bütün koleksiyonları üzerinde Bıkmadan)
sth için olasılığı var mıdır. sevmek.
var my_collections = show collections;
my_collections.forEach(function(current_collection){
print(current_collection);
});
burada Problem my_collections
için atama çalışmaz. SyntaxError: Unexpected identifier
'u alırım. 'Şov' ifadesini alıntılamak zorunda mıyım? Bu mümkün mü?
2. sorun
Bunu yaparak Problem 1 geçici çözüm olabilir (js var koleksiyonu saklama):
error hasNext: false at src/mongo/shell/query.js:124
: last_element.next()
aşağıdaki hata üretir
var my_collections = ["collectionA", "collectionB", "collectionC"];
my_collections.forEach(function(current_collection){
var last_element = db.current_collection.find().sort({_id:-1}).limit(1);
print(current_collection);
printjson(last_element.next()._id.getTimestamp());
});
Last_element öğesinin doğru kaydedilmemiş gibi görünüyor.
Yanlış yaptığım şeylerle ilgili herhangi bir öneriniz var mı?
GÜNCELLEME
Neils cevabı bu çözümün bana yol. Koduna ek olarak, getTimestamp
işlevinin gerçekten var olup olmadığını kontrol etmek zorunda kaldım. Bazı 'sanal' koleksiyonlar için _id özelliği yok gibi görünüyor.
db.getCollectionNames().forEach(function(collname) {
var last_element = db[collname].find().sort({_id:-1}).limit(1);
if(last_element.hasNext()){
var next = last_element.next();
if(next._id !== undefined && typeof next._id.getTimestamp == 'function'){
printjson(collname + " >> "+next._id.getTimestamp());
}else{
print(collname + " undefined!! (getTimestamp N/A)")
}
}
});
Sadece açıklığa kavuşturmak için. .getTimeStamp() 'un başarısız olmasının tek nedeni, her belgede birincil anahtar' _id 'alanında aslında bir 'ObjectId' bulunmamasıdır. ** buna gerçekten değinmelisiniz, çünkü MongoDB, "şema" olduğu için alanları "karıştırmanıza" izin vermiş gibi, ** siz bunu genel bir uygulama olarak yapmamalısınız ve gerçekten bunu düzeltmelisiniz. Bu girişleri tutarlı hale getirmek için nerede oluşur. –
Bu bildirim için teşekkürler! Belirtildiği gibi mongo için oldukça yeni ve ilişkisel bir db arka plandan geliyorum. Bu koleksiyonların nasıl oluşturulduğunu veya neden hiçbir ObjectID değerinin olmadığından emin değilim. Sizin de belirttiğiniz gibi bunu düzeltmem gerekecek ve neden ve nasıl olduğunu anlamanız gerekecek. Teşekkürler! – cb0