2016-04-01 42 views
0

Pymongo'yu birden çok alanla birleştirmeye çalışıyorum, ancak doğru değeri elde etmenin bir yolunu bulamadım.Pymongo Çok alanları olan birleştirme

Ben 2 alanlara göre toplam dosyaların sayısı almak gerekiyor: time ve

timestate pymongo üzerinden bir datetime nesnedir ve sadece yy/mm elde edebildi/

'$group': { "_id":{ 
      "date":{"$concat": [ 
        {"$substr": [{"$year": "$date"}, 0, 4 ]}, 
        "-", 
        {"$substr": [{"$month": "$date"}, 0, 2 ]}, 
        "-", 
        {"$substr": [{"$dayOfMonth": "$date"}, 0, 2 ]}, 
       ]}}, 
      "count":{"$sum": 1}} 
kullanılarak dd

Bu benim için doğru tarih ayıklamak almak ve günlükleri sayısını saymak, ama şimdi de state grup yüzden

ben eklemeden denedim mysql

yılında GROUP BY date, state olur gerekiyor olabilir _id

'$group': { "_id":{ 
      "date":{"$concat": [ 
        {"$substr": [{"$year": "$date"}, 0, 4 ]}, 
        "-", 
        {"$substr": [{"$month": "$date"}, 0, 2 ]}, 
        "-", 
        {"$substr": [{"$dayOfMonth": "$date"}, 0, 2 ]}, 
       ]}}, 
      "_id":{"state":"$timeline.state"}, 
      "count":{"$sum": 1}} 

iç ve {u'count': 4111, u'_id': {u'state': [0, 1]}} gibi biçimde birden çok çıkış oluşturur 0 ve 1 farklı devletler için kodlardır. Tarih bulunacak bir yer değil.

Sonra

'$group': { "_id":{ 
      "date":{"$concat": [ 
        {"$substr": [{"$year": "$date"}, 0, 4 ]}, 
        "-", 
        {"$substr": [{"$month": "$date"}, 0, 2 ]}, 
        "-", 
        {"$substr": [{"$dayOfMonth": "$date"}, 0, 2 ]}, 
       ]}}, 
      "state":"$timeline.state"}, 
      "count":{"$sum": 1}} 

çalıştı ve ben doğru yerde parantez elde etmediği Bu görünüyor, ama ne olursa olsun ben biçimi, aynı hata kalıntıları nasıl değiştiğini failed: A pipeline stage specification object must contain exactly one field.

var . Şimdi merak ediyorum, bu gerçekten meselenin problemi mi? En önemlisi, bunu nasıl doğru yapabilirim?

cevap

1

Böyle senin $group aşamasında bir bileşik _id alanı kullanabilirsiniz gerekir:

"$group": { 
    "_id":{ 
     "date":{ 
      "$concat": [ 
       { "$substr": [ { "$year": "$date" }, 0, 4 ] }, 
       "-", 
       { "$substr": [ { "$month": "$date" }, 0, 2 ] }, 
       "-", 
       { "$substr": [ { "$dayOfMonth": "$date" }, 0, 2 ] } 
      ] 
     }, 
     "state": "$timeline.state" 
    }, 
    "count": { "$sum": 1 } 
} 
+0

görüyorum. Yani her şey '_id' braketi içinde olmalı. Sanırım şimdi işe koyuldum. Sadece bir "saymak" işe yaramazdı, değil mi? Bir şekilde "tarihi" olanı hesaba katmam gerekmiyor, daha sonra devleti başka bir zamana saymam gerekmiyor mu? – JChao

İlgili konular