Ich habe diese SammlungMögliche Abfrage mit MongoDB
[{
"_id" : ObjectId("57a8a6c3c48933256cfd8368"),
"Title" : "T1",
"TitleData" : [
{
"UserId" : ObjectId("57a87f5cc48933119cb96f9b"),
"Res" : 2
},
{
"UserId" : ObjectId("57a87f5cc48933119cb96fa7"),
"Res" : 2
},
{
"UserId" : ObjectId("57a87f5cc48933119cb96f96"),
"Res" : 2
},
{
"UserId" : ObjectId("57a87f5cc48933119cb96f9c"),
"Res" : 2
},
{
"UserId" : ObjectId("57a87f5cc48933119cb96f9d"),
"Res" : 0
}
]
},
{
"_id" : ObjectId("57a8a6c3c48933256cfd8369"),
"Word" : "T2",
"WordsData" :
[
{
"UserId" : ObjectId("57a87f5cc48933119cb96f9b"),
"Res" : 2
},
{
"UserId" : ObjectId("57a87f5cc48933119cb96f96"),
"Res" : 2
}
]
},
{
"_id" : ObjectId("57a8a6c3c48933256cfd8360"),
"Word" : "T3",
"WordsData" :
[
{
"UserId" : ObjectId("57a87f5cc48933119cb96f9b"),
"Res" : 2
},
{
"UserId" : ObjectId("57a87f5cc48933119cb96fa7"),
"Res" : 0
}
]
}
]
Ich brauche eine Abfrage, um nur Dokumente zu extrahieren, die:
a) Enthält in title UserId
= "57a87f5cc48933119cb96f9b" AND "57a87f5cc48933119cb96fa7"
b) mindestens eine der 2 title Element muss Keyword-Option haben = 2
Also das Endergebnis sein wird:
[{
"_id" : ObjectId("57a8a6c3c48933256cfd8360"),
"Title" : "T3",
"TitleData" :
[
{
"UserId" : ObjectId("57a87f5cc48933119cb96f9b"),
"Res" : 2
},
{
"UserId" : ObjectId("57a87f5cc48933119cb96fa7"),
"Res" : 0
}
]
}
]
Was ich tun kann, ist Filterergebnisse für das a) Kriterien mit dem folgenden Befehl:
db.getCollection('collection_name').find({TitleData:{$elemMatch:{UserId:ObjectId("57a87f5cc48933119cb96f9b"),UserId:ObjectId("57a87f5cc48933119cb96fa7")}}})
, aber ich kann in und mit a) keinen Weg mit dem b) Zustand filtern finden.
Irgendwelche Vorschläge?
[EDIT]
Diese Lösung funktioniert besser für Punkt a).
db.getCollection('collection_name').find({
$and: [{
TitleData: {
$elemMatch: {
UserId: ObjectId("57a87f5cc48933119cb96f9b")
}
}
},{
TitleData: {
$elemMatch: {
UserId: ObjectId("57a87f5cc48933119cb96fa7")
}
}
},
{
TitleData: {
$elemMatch: {
$ne: {
"Res": 2
}
}
}
}]
}));
Ja! Die Lösung ist gut! Jetzt versuche ich es in .NET zu implementieren, gab aber immer den Fehler 'Doppelter Elementname' für UserId zurück. Wie auch immer, deine Lösung funktioniert! Vielen Dank ! – Marco
@Marco Warum hast du nicht akzeptiert, funktioniert es nicht wie erwartet? –
Ich überschreibe deine Lösung, um den a) Punkt zu beheben. Deine Lösung für b) Teil ist richtig. – Marco