MongoDB с мангустом или SQL - PullRequest
0 голосов
/ 30 июня 2018

Я немного новичок в mongoDB и пытаюсь выяснить, должен ли я использовать MongoDB или использовать знакомый SQL.

Сначала я действительно хотел использовать MongoDB, но все идет очень медленно, и у меня возникают трудности с проектированием моей БД и запросов.

Например: SQL

Допустим, у меня есть эти таблицы:

User Table (Id, Name)

Group (Id, Name)

GroupInvites (UserId, GroupId, Status[A - active, I - invited])

И если бы я хотел знать, есть ли у игрока приглашения и групповые приглашения, было бы довольно легко выбрать SELECT и UPDATE из таблицы GroupInvites.

MongoDB

Но в MongoDB GroupInvites является избыточным, потому что у нас может быть Status в схеме группы.

const BetGroupSchema = mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    users: [{
        userId: {
            type: mongoose.SchemaTypes.ObjectId,
            ref: 'users',
            required: true
        },
        userStatus: {
            type: String,
            required: true
        }
     }]
})

Но теперь, если бы я хотел ВЫБРАТЬ только те группы, на которые приглашен конкретный пользователь, это было бы намного сложнее -

Group.find({
    "users.userId": req.user._id,
    "users.userStatus": "I"
}) 

Результатом этого будет предоставление всей группы, имеющей UserID, и всех групп, которые имеют UserStatus = 'I'.

А также я не могу найти быстрый способ обновить БД напрямую, если бы я хотел обновить статус определенного пользователя до «А».

Возможно, я ошибся, и кто-то может показать мне хороший способ реализовать его в MongoDB, или вы думаете, что было бы лучше использовать SQL.

1 Ответ

0 голосов
/ 30 июня 2018

Я могу понять, как новичку, что трудно выполнить даже простой запрос, если бы я был на вашем месте, я выполнил бы запрос следующим образом

1. Найти запрос для документа, вложенного в массив:

 Group.find({users: {$elemMatch: {userId:req.user._id, userStatus:"I"}}})

2. Запрос на обновление документа, вложенного в массив:

Group.update( { "name": "John","users.userId" : req.user._id }, 
              { "$set": { "users.$.userStatus": "A" } } )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...