2016-04-05 20 views
1

Bir alt belgeler dizisini, sahibi kimliği tarafından oluşturulan bir koleksiyona taşımak istiyorum. Şu anda, benim toplama böyle oluşur: Ben en iyi yolu arıyorumMongoDB kendi koleksiyonuna alt belgelerden oluşan bir dizi taşınıyor

"_id": ObjectId("123"), 
"username": "Bob Dole", 
"logins": [{ 
    "_id": ObjectId("abc123"), 
    "date": ISODate("2016") 
}, { 
    "_id": ObjectId("def456"), 
    "date": ISODate("2016") 
}] 

her kullanıcı üzerinde döngü olur bir senaryo yazmak, ve kendi "logins" koleksiyonuna girişler dizisindeki her bir öğeyi taşımak için , aşağıdaki gibi:

{ 
    "_id": ObjectId("abc123"), 
    "_ownerId": ObjectId("123"), 
    "date": ISODate("2016") 
} 
{ 
    "_id": ObjectId("def567"), 
    "_ownerId": ObjectId("123"), 
    "date": ISODate("2016") 
} 

komut sona erdiğinde, ben giriş dizisi tüm kullanıcılardan tamamen kaldırılmasını istiyorum.

+0

ben Yeni koleksiyonunuzdaki öğeleri koleksiyonunuzda göremediniz – styvane

+0

_ownerId kaynağı nedir? - Benim için net değil. – profesor79

+0

@ user3100115 Teşekkür ederiz, güncellendi. – ThinkingInBits

cevap

2

bu sorgu nasıl göründüğünü görmek için toplama çerçevesinin kullanarak yeni koleksiyonunu yaratacak - Dizi kayıtları silmek için

db.thinking.aggregate([ 
{ 
    $unwind:"$logins" 
},{ 
    $project:{ 
     _id:"$logins._id", 
     _ownerId:"$_id", 
     date:"$logins.date" 
    } 
}, 
{ 
    $out: "newCollection" 
} 
]) 

sadece boru hattı aşamasını $ dışarı çıkarmak - yorumunda önerildiği gibi:

db.thinking.update({},{ "$unset": { "logins": "" } },{ "multi": true }) 
+1

** Yeni ** koleksiyonunda "$ out" ın "alt belgeler" için iyi bir seçenek olduğunu kabul ederken, master koleksiyonunu "yeniden şekillendirmek" için gerçekten kullanmamalısınız. **, "kaynak" ile aynı koleksiyon adını "üzerine yazamaz" ve bu nedenle "başka bir koleksiyon" ile sonuçlanamaz. Her neyse 'db.thinking.update ({}, {" $ unset ": {" oturum açma ":" "}}, {" multi ": true})' ** ** daha ** etkili ** Doğrudan "kaynak". –

+0

@Neil Lunn ipucu için teşekkürler, agregation framework hakkında biraz deli olduğumu görebiliyorum – profesor79

İlgili konular