sql >> Database teknologi >  >> NoSQL >> MongoDB

Rækkefølge af resultater i MongoDB med $in?

Generelt:hvis du søger uden angivet sorteringsrækkefølge, er der ingen garanteret rækkefølge af resultater.

Derudover er det ikke muligt at sortere efter et array (endnu mindre, hvis du vil sortere et array efter et array som beskrevet). En sort() bruger logisk sammenligning til at bestemme stigende eller faldende rækkefølge baseret på et felt i dine resultatdokumenter.

Du skal implementere enhver ønsket tilpasset sorteringslogik i din egen applikationskode.

En nyttig tilgang kan være at drage fordel af det nye Aggregation Framework i MongoDB 2.2 .. især evnen til at $unwind et array i en strøm af dokumenter.

For eksempel opsætning af testdata som:

{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac946b50571321b2f932b"), "a" : [ 5, 4, 9 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }

En $in søgning på [2,3] ville resultere i de matchende dokumenter:

> db.matches.find({'a': { $in: [2,3]}})
{ "_id" : ObjectId("504ac93fb50571321b2f932a"), "a" : [ 1, 2, 4 ] }
{ "_id" : ObjectId("504ac94eb50571321b2f932c"), "a" : [ 2, 1, 3 ] }
{ "_id" : ObjectId("504ac954b50571321b2f932d"), "a" : [ 7, 3, 9 ] }

Med aggregeringsrammen kunne du $match de samme dokumenter og manipuler derefter resultaterne for at opnå en vis grundlæggende sortering:$unwind arrays, $sort dem, og derefter $group disse tilbage til et resultat:

db.matches.aggregate(
  { $match : {
       a: { $in: [2,3] }
  }},
  { $unwind : "$a" },
  { $sort: {
      "a": -1
  }},
  { $group : {
      _id: '$_id',
      a: { $addToSet: "$a" }
  }}
)

Så i dette eksempel er dokumenterne med matchende arrays nu sorteret i stigende rækkefølge for array-værdierne:

{
    "result" : [
        {
            "_id" : ObjectId("504ac94eb50571321b2f932c"),
            "a" : [ 1, 2, 3]
        },
        {
            "_id" : ObjectId("504ac93fb50571321b2f932a"),
            "a" : [ 1, 2, 4 ]
        },
        {
            "_id" : ObjectId("504ac954b50571321b2f932d"),
            "a" : [ 3, 7, 9 ]
        }
    ],
    "ok" : 1
}


  1. Spring Data MongoDB Lookup med Pipeline Aggregation

  2. Parse fejl:syntaksfejl, uventet '}' i C:\xampp\htdocs\lib\autors.php på linje 8

  3. pluk vs distinkt i mongoid db. hvad er hurtigere?

  4. Indlejret MongoDB-dokument får ikke et ID ved lagring med C#-driver