Ich habe Sammlung path_test
mit 2 Dokumenten in ihmFinden Dokument mit Array, das ausschließlich bestimmte Dokumente in MongoDB
Dokument 1
{
"_id" : 1,
"tpc" : 5,
"path" : [
{
"nids" : [ 0, 10, 11 ],
"ctc" : 2
},
{
"nids" : [ 0, 10 ],
"ctc" : 2
},
{
"nids" : [ 0, 10, 21 ],
"ctc" : 1
}
]
}
Dokument 2
{
"_id" : 2,
"tpc" : 5,
"path" : [
{
"nids" : [ 0, 10, 110 ],
"ctc" : 1
},
{
"nids" : [ 0, 10, 11 ],
"ctc" : 2
},
{
"nids" : [ 0, 5 ],
"ctc" : 2
}
]
}
besteht Was Ich versuche, als Ergebnis Dokumente mitzu bekommenArray, in dem alle Elemente nids
wie [0, 10, *]
haben. Reihenfolge ist wichtig, also [10, 0, *]
wird falsch sein. Es sollte Dokument 1, aber nicht Dokument 2 finden. Ich hoffe, ich kann dies mit einer Abfrage lösen, bevor ich Map-Reduce oder Aggregation verwende.
Dies ist, was ich
db.getCollection('path_test').find({
"path": { $not: { $elemMatch: { "nids.0": { $nin: [0] }, "nids.1": { $nin: [10] } } } }
});
Abfrage 2
db.getCollection('path_test').find({
"path.nids": { $not: { $elemMatch: { $nin: [0, 10] } } }
});
bisher
Query1 versucht haben, aber beide Abfragen geben Sie mir führt, wo nur 0 in oder wo nur 10 ist, aber ich brauche beide und in dieser genauen Reihenfolge.
Ist das möglich?
Hoffe, dass Sie sich dessen bewusst sind. '$ ElemMatch' nur zurückkehren ein Datensatz, der der Abfrage entspricht – Shrabanee
@Shrabanee Danke, dass du das herausgibst, aber ich habe verstanden, dass es mindestens ein Element mit diesem Feld enthält – adpap
@Shrabanee https://docs.mongodb.com/manual/reference/operator/ query/elemMatch/ – adpap