o db.collection.findOne
gibi gibi db.collection.aggregate
tek bir belge almak mümkün mü?Tek bir sonucu toplu olarak almak mümkün mü?
cevap
boru hattının kümelenmeye karşı $match
sahne eklemek mümkündür. Ancak, yalnızca tek bir belgeyle eşleşecek olsa bile, sonuç yine de bir liste olacaktır (bu durumda bir uzunluğun uzunluğu). Yani cevap "mümkün değildir, HAYIR" dir.
Evet, bu mümkün. Sadece null
eşit _id
ile $group
sahne ekleyin. Bu, tüm girdi belgeleri için bir bütün olarak birikmiş değerleri hesaplar. Örneğin.
{ $group: { _id: null, total: { $sum: "$price" }}}
Yoksa toplu sonuçlarından yalnızca bir belgeyi almak istiyorsanız, kullanabileceğiniz $limit
:
{ $limit: 1 }
GÜNCELLEME: Her iki çözüm tek bir belge olurdu imleci döndürür. Ama özel bir şey olarak findOne
hakkında düşünmeyin. Ayrıca imleci alır ve sadece ilk belgeyi alır (varsa). Gördüğünüz gibi
function (query , fields, options){
var cursor = this.find(query, fields, -1 /* limit */, 0 /* skip*/,
0 /* batchSize */, options);
if (! cursor.hasNext())
return null;
var ret = cursor.next();
if (cursor.hasNext()) throw "findOne has more than 1 result!";
if (ret.$err)
throw "error " + tojson(ret);
return ret;
}
, dahili olarak find
kullanır: İşte findOne
ait Mongo kabuk uygulamasıdır. Eğer tek bir belge yerine tek belge ile imleci almak istiyorsanız Yani, aggregate
aynı işi kendi işlevini yazabilirsiniz. Örneğin.
> DBCollection.prototype.aggregateOne = function(pipeline) {
var cur = this.aggregate(pipeline);
if (!cur.hasNext())
return null;
return cur.next();
}
Kullanımı:
> db.collection.aggregateOne(...)
Maalesef hala çok güzel açıklanmış bir eleman – Erik
Bullseye (y) ile bir dizi olsun. –
evet bu mümkün. mongodb $match işletimini
ex: kullanmanız gerekiyor.
{ $lookup: { from: 'user', localField: 'userId', foreignField: 'id', as: 'publisherDetails' } },
{ $match: { id } }
mondodb doc's örnek:
db.articles.aggregate(
[ { $match : { id : "132ada123aweae1321awew12" } },
{ $lookup: { from: 'user', localField: 'userId', foreignField: 'id', as: 'publisherDetails' } } ]
);
- 1. SonarQube'de OpenCover/sonucu almak mümkün mü?
- 2. AngularJS'de sertifika almak mümkün mü?
- 3. Tek istekle Amazon S3'ten çoklu nesne almak mümkün mü?
- 4. farklı sonuçlar almak mümkün mü?
- 5. clojure.test'in çıktısını almak mümkün mü?
- 6. RSS arşivini almak mümkün mü
- 7. Bir WDFREQUEST oluşturan CPU'yu almak mümkün mü?
- 8. Nexus ile tek bir dosyayı proxy olarak göndermek mümkün mü?
- 9. HQL ile çok fazla ilişkilendirme toplu olarak silmek mümkün mü?
- 10. Tkinter'da widget ayarları almak mümkün mü?
- 11. Arama yığınını programlı olarak VB6'ya almak mümkün mü?
- 12. Kapağın arayan nesnesini groovy olarak almak mümkün mü?
- 13. Android'de video çözünürlüğünü almak mümkün mü?
- 14. Tek bir metin dosyasında dizelerin toplu olarak değiştirilmesi (Notepad ++)
- 15. Haskell Tür Tip Oluşturucu almak mümkün mü?
- 16. WebEngineView'de tıklanan linkin URL'si almak mümkün mü?
- 17. Mesajları Android emülatörüne almak mümkün mü?
- 18. JSON üzerinden e-posta almak mümkün mü?
- 19. Android'de Skype hesabımdan kişileri almak mümkün mü?
- 20. "Her şeyi" javax.naming.InitialContext adresinden almak mümkün mü?
- 21. Vim'de komutları sıraya almak mümkün mü?
- 22. Hata veren satır numarasını almak mümkün mü?
- 23. Ham param dizisini raylara almak mümkün mü?
- 24. Powershell cmdlet'lerini eşzamansız olarak çağırmak mümkün mü?
- 25. DateInterval nesnesinden "interval_spec" dizesini almak mümkün mü?
- 26. Yönlendirme yöntemini VB.NET'te almak mümkün mü?
- 27. VBScript'te bir .Net string nesnesi örneği almak mümkün mü?
- 28. Bir numaralayıcıyı ilerletmek ve değerini bir lambda almak mümkün mü?
- 29. jQuery'de bir öğeye bağlı olayların bir listesini almak mümkün mü?
- 30. Uzak bir resmin bir bölümünü javascript içine almak mümkün mü?
burada bulman için ne soruyorsun gerçekten net değil. Özellikle ne yapmak istediğinizi açıklamalısınız. BTW şu ana kadar verilen cevap çoğu vaka için yanlıştır. –