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

Как бихте моделирали приятелска връзка в MongoDB?

MongoDB обикновено не е подходящ за моделиране на графични отношения. Има специализирани бази данни с графики, които се справят отлично с тази задача.

Въпреки това, когато не искате да добавите друга технология за бази данни към микса, бих препоръчал да създадете нова колекция frienships и моделирайте всяка приятелска връзка като документ с масив от два записа, всеки от които е обект със съкратена информация за един от потребителите, който ви е необходим, за да покажете запис във вашите списъци с приятели:

{
    friendship: [
       {
            id:123,
            name: "Bob",
            avatar: "Bob.jpg"
       },
       {
            id:456,
            name: "Alice",
            avatar: "Alice.jpg"
       }
    ]
}

Причината за дублиране на информация от потребителските документи в документите за приятелство е да се избегне второ запитване към потребителската колекция, за да се получат всички данни за показване на потребителски списък с приятели. MongoDB не може да прави JOINs може да изпълнява JOIN само върху неразделени колекции , така че трябва да избягвате разпространението на данни, от които се нуждаете за конкретен случай на употреба, върху множество колекции, дори когато това означава, че създавате излишъци. В противен случай ще трябва да изпълнявате множество заявки една след друга, което значително забавя времето за отговор на вашето приложение.

Когато искате да получите списъка с приятели на потребител 123, трябва да извършите db.friendships.find({"friendship.id", 123}) (индекс на friendship.id ще подобри производителността) и след това получавате списък с документи, където Боб е или първият, или вторият приятел.

След това ще повторите тези документи и ще изведете кратката информация за записа в масива, който не потребител 123.

Като алтернатива можете да филтрирате Bob-записите в базата данни с тръбопровод за агрегиране. Използвайте заявката $match по-горе, $unwind приятелския масив и след това $match тези документи, където id не е 123. Това би било компромис:спестявате честотна лента за сметка на натоварването на процесора на сървъра на базата данни.

За да попитате дали вече съществува приятелска връзка, използвайте:

db.friendships.find( { $and: [ 
       { "friendship.id": 123 }, 
       { "friendship.id": 456 } 
    ] } ).count();



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo:как да сортирате по външно тегло

  2. adhoc заявките/актуализациите започват ли да убиват продуктивността ви с MongoDB?

  3. Зареждане на изображение от двоичен (Javascript - Ajax - MongoDB)

  4. Конвертирайте base64 изображение във файл в Node Js

  5. mongodb javascript от страна на сървъра всъщност е клиент?