2011-05-18 27 views
43

ben bir koleksiyon için tüm benzersiz şehirler elde edebilmek istiyorum bir sorun var ve benim kod şöyle görünür:Mongoose'daki farklı değerler için nasıl sorgu yaparım?

var mongoose = require("mongoose"), 
Schema = mongoose.Schema; 

var PersonSchema = new Schema({ 
    name: String, 
    born_in_city: String 
}); 
var Person = mongoose.model('Person', PersonSchema); 

Sadece db.person.distinct("born_in_city") yapabileceği yerli mongodb olarak, ama orada gelmez' Mongoose için eşdeğer bir şey gibi görünüyor. Bunu yapmak için tüm belgelerin üzerinde kendimi yineleme seçeneği var mı, yoksa daha iyi bir çözüm var mı? yanıtlayanın tarafından önerildiği gibi altta yatan node-mongodb-native kullanmak için bir girişimde

bunu yapmak teşebbüs:

mongoose.connection.db.collections(function(err, collections){ 
    collections[0].distinct('born_in_city', function(err, results){ 
    console.log(err, results); 
    }); 
}); 

results boştur ve herhangi bir hata olmasa Ancak. Aynı zamanda, sadece gerekli olan koleksiyonu, mümkün olan her durumda collections nolu iadeyi filtrelemekten ziyade isimle almayı tercih ederim.

cevap

80

1.3.3 Sadece Gelincik 3.x için bir güncelleme vermek: öneri için

MyModel.find().distinct('_id', function(error, ids) { 
    // ids is an array of all ObjectIds 
}); 
+23

Ayrıca doğrudan [Model] 'de de arayabilirsiniz (http://mongoosejs.com/docs/api.html#model_Model-distinct). 'MyModel.distinct ('_ id', {foo: 'bar'}, işlev (hata, ids) ...' – JohnnyHK

+0

Başar, teşekkürler! – diosney

+0

Sonra ids tarafından sonucu sipariş verebilirim? – Melki

2

Kaynak kodunu okudum ve düğüm-mongodb-native sürücüsü sınıfın gücüdür. Yani bağlantı nesnesi üzerinde. Yani mongoose.connect (mongodb: //) yaptıktan sonra, bunu bir atış yapabilirsiniz.

if(mongoose.connections.length > 0) { 
    var nativeconn = mongoose.connections[0].conn; 
    nativeconn.person.distinct('born_in_city', function(error, results){ 

    }); 
} 
+0

teşekkür ederiz. 'mongoose.connections [0] .conn' benim için undefined, ancak eminim mongoose.connection' etkin bağlantı için aynı şeyi döndürüyor. Ben önerdim gibi 'mongoose.connection.person' kullanamıyorum, bunun yerine 'mongoose.connection.db.collections (..)' için bir çağrı yaptım, ama ben bir kez 'collection.distinct (..)' koştu Sonuçlar boştu. Şimdiye kadar yaptığım girişimleri yansıtmak için sorumu güncelledim. –

13

Programımda bu kod çalışır.

Person.collection.distinct("born_in_city", function(error, results){ 
    console.log(results); 
}); 

node.js v0.4.7, firavunfaresi tarafından

+0

Bu harika çalışıyor, teşekkürler! :) –

İlgili konular