Ecco la mia struttura del databaseGet elemento casuale dalla matrice in MongoDB
{
"_id" : ObjectId("576155226d1d298c2cc3edca"),
"questionLibrary" : {
"technologyName" : "CSS",
"questions" : [
{
"correctanswer" : {
"A1" : "CSS1"
},
"answeroption" : {
"A4" : "CSS1",
"A3" : "CSS1",
"A2" : "CSS1",
"A1" : "CSS1"
},
"level" : "Amature",
"tags" : "CSS",
"question" : "CSS1"
},
{
"question" : "CSS2",
"tags" : "CSS",
"answeroption" : {
"A1" : "CSS2",
"A2" : "CSS2",
"A3" : "CSS2",
"A4" : "CSS2"
},
"level" : "Amature",
"correctanswer" : {
"A1" : "CSS2"
}
},
{
"correctanswer" : {
"A1" : "CSS3"
},
"answeroption" : {
"A4" : "CSS3",
"A3" : "CSS3",
"A2" : "CSS3",
"A1" : "CSS3"
},
"level" : "Amature",
"tags" : "CSS",
"question" : "CSS3"
},
{
"correctanswer" : {
"A1" : "CSS4"
},
"answeroption" : {
"A4" : "CSS4",
"A3" : "CSS4",
"A2" : "CSS4",
"A1" : "CSS4"
},
"level" : "Amature",
"tags" : "CSS",
"question" : "CSS4"
},
{
"correctanswer" : {
"A1" : "CSS5"
},
"answeroption" : {
"A4" : "CSS5",
"A3" : "CSS5",
"A2" : "CSS5",
"A1" : "CSS5"
},
"level" : "Amature",
"tags" : "CSS",
"question" : "CSS5"
},
{
"correctanswer" : {
"A1" : "CSS6"
},
"answeroption" : {
"A4" : "CSS6",
"A3" : "CSS6",
"A2" : "CSS6",
"A1" : "CSS6"
},
"level" : "Amature",
"tags" : "CSS",
"question" : "CSS6"
},
{
"correctanswer" : {
"A1" : "CSS7"
},
"answeroption" : {
"A4" : "CSS7",
"A3" : "CSS7",
"A2" : "CSS7",
"A1" : "CSS7"
},
"level" : "Amature",
"tags" : "CSS",
"question" : "CSS7"
},
{
"correctanswer" : {
"A1" : "CSS8"
},
"answeroption" : {
"A4" : "CSS8",
"A3" : "CSS8",
"A2" : "CSS8",
"A1" : "CSS8"
},
"level" : "Amature",
"tags" : "CSS",
"question" : "CSS8"
},
{
"correctanswer" : {
"A1" : "CSS9"
},
"answeroption" : {
"A4" : "CSS9",
"A3" : "CSS9",
"A2" : "CSS9",
"A1" : "CSS9"
},
"level" : "Amature",
"tags" : "CSS",
"question" : "CSS9"
},
{
"correctanswer" : {
"A1" : "CSS10"
},
"answeroption" : {
"A4" : "CSS10",
"A3" : "CSS10",
"A2" : "CSS10",
"A1" : "CSS10"
},
"level" : "Amature",
"tags" : "CSS",
"question" : "CSS10"
}
]
},
"__v" : 3
}
dalla matrice domanda, voglio ottenere un oggetto casuale (domanda casuale) ogni volta che mi sparo la query.
Non voglio raccogliere tutti gli oggetti alla volta e gestirli nel nodo. È possibile scrivere una query in modo che restituisca un oggetto casuale ogni volta?
Suggerirei di rimodellare lo schema per denormalizzare l'array 'questions' memorizzando i dati in una raccolta separata, ad esempio' domande'. Puoi quindi utilizzare facilmente l'operatore [** '$ sample' **] (https://docs.mongodb.com/master/reference/operator/aggregation/sample/#pipe._S_sample) della pipeline di aggregazione insieme a un filtro su il tag per disegnare un documento di esempio. È molto più facile interrogare in questo modo. Una query di esempio potrebbe essere 'db.questions.aggregate ([{" $ sample ": {" size ": 1}}])' – chridam