MongoDB: zaten yok sadece $ addToSet / $ itme belge

0 Cevap php

Ben her belge members bir dizi var bir lists koleksiyonu var. members dizisinin her bir elemanı bir email özellik, yaratılış date mülkiyet, ve diğer bazı meta ile bir belgedir. I members.email iki kez aynı listede girmeden aynı e-posta önlemek için benzersiz bir dizin var, ama ben orijinal date değerini korumak istiyoruz. Ne yazık ki, ne $addToSet, ne $push bunu görünmektedir.

$ Itme kullanarak Örnek:

$lists->update(array('_id' => $list['_id'], 'members.email' => array('$ne' => $email)), array('$push' => array('members' => array(
    'email' => $email,
    'date' => new MongoDate(),
    // etc.
))));

Ve $ addToSet ile:

$lists->update(array('_id' => $list['_id']), array('$addToSet' => array('members' => array(
    'email' => $email,
    'date' => new MongoDate(),
    // etc.
))));

Her iki örnek nedeniyle (I varsayıyorum) benzersiz date değerine yenisiyle tüm gömülü belgeyi değiştirin. Bu mümkün mü, sadece $push "üye" belge eğer members.email zaten yok ya da ben iki komutlarla bunu yapmak gerekir?

Alternatif olarak, bu daha iyi olurdu ölçeklenebilirlik-bilge bir parent_list gibi özelliği ile kendi koleksiyonunda members koymak için?

0 Cevap