MongoDB kullanırken, Grails criteria projeksiyonlarının sonuçlarını nasıl sipariş edersiniz? MongoDB tarafından sıralama yok sayılıyor gibi görünüyor. Aşağıdaki kod, Grails varsayılan bellek içi HSQLDB veritabanında çalıştırıldığında doğru şekilde sıralanmış kitap başlıklarının bir listesini döndürür. MongoDB'ye geçmek, sıralamanın göz ardı edilmesine neden olur. ileMongoDB ile sıralama düzenini dikkate almayan sınıflandırma projeksiyonları
BookController.groovy
class BookController {
def library = [
[author: "Jan", title: "HTML5"],
[author: "Lee", title: "CSS3"],
[author: "Sue", title: "JavaScript"]
]
def titles() {
library.each { if (!Book.findByTitle(it.title)) new Book(it).save() }
def ids = Book.createCriteria().list() {
projections { id() }
order "title"
}
def titles = ids.collect { Book.get(it).title }
render titles as JSON
}
}
Sonucu varsayılan (doğru) DB:
["HTML5","CSS3","JavaScript"]
Not Yukarıdaki kitap bu: MongoDB (yanlış) ile
["CSS3","HTML5","JavaScript"]
Sonucu örnek problemi göstermek için sadece önemsiz bir koddur. Asıl amaç, alanın bir alanın sıralamasına göre sıralanmış olan bir alan adı kimlikleri listesi oluşturmaktır, böylece alan, istenen sıraya göre tekrarlanabilir.
Karşılaştığım gerçek etki alanı belleğe sığamayacak kadar büyük. Başka bir deyişle, bu uygulamanın çökmesine neden olur: Book.list().title.sort()
Aşağıda ek arkaplan bilgisi yer almaktadır.
Book.groovy
class Book {
String title
String author
static mapWith = "mongo"
}
BuildConfig.groovy
...
compile ":mongodb:1.3.1"
...
DataSource.groovy
...
grails {
mongo {
host = "localhost"
port = 27017
databaseName = "book-store"
}
}
Tüm örnekler Pars içinde parametresine sahip ve yönünü, sipariş gibi ("başlığı", "artan") yer alır işlemek - Bunu denediniz mi? Ayrıca, projeksiyon içermediğinizde sipariş doğru mu? –
@AsyaKamsky: Evet, parens olmadan ve olmadan ve yönsüz ve denedim. Ölçütlere "sipariş" eklemeyi bile denedim. Örnek: 'criteria = criteria.order (" order ")' Sıralama 'projeksiyonlar' yapılmadan yapıldığı zaman doğrudur, bu yüzden konuların MongoDB'de 'projeksiyon'ları kullanmaya özgü olduğu görülmektedir. –
İds’lerin ölçüt değerlerindeki ids sıralama düzeni nedir? Projeksiyonları {id()} 'değiştirirseniz herhangi bir şey değişir mi? 'projeksiyonlar {property ('id')}' – matcauthon