MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

mongodb:най-добрият начин да получите конкретни документи и след това останалите

Е, тук няма много подробности, но мога да дам примерен случай за разглеждане. Разгледайте следния набор от документи:

{ "user" : "fred", "color" : "black" }
{ "user" : "bill", "color" : "blue" }
{ "user" : "ted", "color" : "red" }
{ "user" : "ted", "color" : "black" }
{ "user" : "fred", "color" : "blue" }
{ "user" : "bill", "color" : "red" }
{ "user" : "bill", "color" : "orange" }
{ "user" : "fred", "color" : "orange" }
{ "user" : "ted", "color" : "orange" }
{ "user" : "ally", "color" : "orange" }
{ "user" : "alice", "color" : "orange" }
{ "user" : "alice", "color" : "red" }
{ "user" : "bill", "color" : "purple" }

Да предположим, че искате да балонирате елементите за потребителите "bill" и "ted" в горната част на вашите резултати, след това всичко останало сортирано по user и color . Това, което можете да направите, е да стартирате документите през $project етап в съвкупност, както следва:

db.bubble.aggregate([

    // Project selects the fields to show, and we add a weight value
    {$project: {
        _id: 0,
        "user": 1,
        "color": 1,
        "weight": {$cond:[
            {$or: [
                {$eq: ["$user","bill"]},
                {$eq: ["$user","ted"]}
            ]},
            1,
            0
         ]}
     }},

    // Then sort the results with the `weight` first, then `user` and `color`
    {$sort: { weight: -1, user: 1, color: 1 }}

])

Това, което прави, е условно присвояване на стойност на weight въз основа на това дали user беше съпоставен с една от изискваните стойности. Документи, които не съвпадат, просто получават 0 стойност.

Когато преместим това модифицирано документ към $sort фаза, новото weight може да се използва за подреждане на резултатите, така че "претеглените" документи да са отгоре и всичко останало ще последва след това.

Има доста неща, които можете да направите за $project тегло по този начин. Вижте препратката към оператора за повече информация:

http://docs.mongodb.org/manual/reference/operator/aggregation/




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb c# драйвер и ISODate

  2. Как да използвате mongoose findOne

  3. най-добрата практика на mongodb:влагане

  4. Как да променя всички елементи на масива в документ mongodb на определена стойност?

  5. MongoDB актуализира множество поддокументи с или заявка