Wenn Sie alle Rekord für Ihre Anforderungen einschließlich aller anderen Elemente der arrWhoHasRead
angezeigt werden soll, ein find
genügt:
db.device.find({"bHardCover": "yes","bIsDamaged" : "yes","arrWhoHasRead.nUserID":ObjectId("577b0b8d41140640f94894a1"),"arrWhoHasRead.strRole":"Author"});
, die Sie geben werden:
{
"_id": ObjectId("578d7f9aca19a63da3984899"),
"strName": "Some Book In Library",
"strUPN": "123456",
"bHardCover": "yes",
"bIsDamaged": "yes",
"arrWhoHasRead": [{
"nUserID": ObjectId("577b0b8d41140640f94894a1"),
"strPersonName": "John Doe",
"strRole": "Author"
}, {
"nUserID": ObjectId("578d7d6bca19a63da3984897"),
"strPersonName": "Jane Doe",
"strRole": "Customer"
}]
} {
"_id": ObjectId("578d7fb0ca19a63da398489a"),
"strName": "Some Book In Library",
"strUPN": "123456",
"bHardCover": "yes",
"bIsDamaged": "yes",
"arrWhoHasRead": [{
"nUserID": ObjectId("577b0b8d41140640f94894a1"),
"strPersonName": "John Doe",
"strRole": "Author"
}, {
"nUserID": ObjectId("578d7d6bca19a63da3984898"),
"strPersonName": "Jane Doe",
"strRole": "Customer"
}]
}
Wenn Sie Ergebnisse haben wollen, nur die Elemente der arrWhoHasRead
ObjectId("577b0b8d41140640f94894a1")
passend Können Sie ein aggregate
aber keine Notwendigkeit für die Projektion tun, wenn Sie ein anderes Feld ausschließen möchten:
db.device.aggregate([{
"$unwind": "$arrWhoHasRead"
}, {
$match: {
"bHardCover": "yes",
"bIsDamaged": "yes",
"arrWhoHasRead.nUserID": ObjectId("577b0b8d41140640f94894a1"),
"arrWhoHasRead.strRole": "Author"
}
}])
, die geben wird:
{
"_id": ObjectId("578d7f9aca19a63da3984899"),
"strName": "Some Book In Library",
"strUPN": "123456",
"bHardCover": "yes",
"bIsDamaged": "yes",
"arrWhoHasRead": {
"nUserID": ObjectId("577b0b8d41140640f94894a1"),
"strPersonName": "John Doe",
"strRole": "Author"
}
} {
"_id": ObjectId("578d7fb0ca19a63da398489a"),
"strName": "Some Book In Library",
"strUPN": "123456",
"bHardCover": "yes",
"bIsDamaged": "yes",
"arrWhoHasRead": {
"nUserID": ObjectId("577b0b8d41140640f94894a1"),
"strPersonName": "John Doe",
"strRole": "Author"
}
}
Beachten Sie, dass das Array entspannen wurde, so dass Sie nur haben JSON-Objekt in arrWhoHasRead
& so viel wie Datensatz als ObjectId("577b0b8d41140640f94894a1")
in arrWhoHasRead