Возврат пользовательских полей в MongoDB - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть коллекция mongoDB с полем массива, представляющим списки, в которые входит пользователь.

user { 
  screen_name: string
  listed_in: ['list1', 'list2', 'list3', ...] //Could be more than 10000 elements (I'm aware of the BSON 16MB limits)
}

Я использую поле * list_in *, чтобы получить список участников

db.user.find({'listed_in': 'list2'});

Мне также нужно запросить конкретного пользователя и узнать, является ли он членом определенных списков

var user1 = db.findOne({'screen_name': 'user1'});

В этом случае я получу поле * list_in * со всеми его членами.

Мой вопрос: есть ли способ предварительного вычисления пользовательских полей в mongoDB?Мне нужно было бы иметь возможность получить такие поля, как user1.isInList1 , user1.isInList2

Прямо сейчас я должен сделать это на стороне клиента путем итерациичерез массив * selected_in *, чтобы узнать, является ли пользователь членом списка «list1», но в списке * может быть тысяча элементов.

1 Ответ

0 голосов
/ 27 декабря 2011

Мой вопрос: есть ли способ предварительно вычислить пользовательские поля в mongoDB?

Не совсем.MongoDB не имеет никакого понятия «вычисляемые столбцы».Таким образом, искомый запрос не существует.

Прямо сейчас я должен сделать это на стороне клиента, перебирая массив * list_in *, чтобы узнать, является ли пользователь членомlist1 "но * list_in * может содержать тысячи элементов

В вашем случае вы в основном пытаетесь протолкнуть клиентскую петлю for на сервер.Тем не менее, некоторые процессы все равно должны выполнять цикл for.И, честно говоря, цикл по 10 тыс. Элементов на самом деле не так уж много работы для клиента или сервера.

Единственная реальная экономия здесь - это предотвращение лишних данных в сети.этот сетевой трафик, вам нужно будет реструктурировать вашу модель данных.Эта реструктуризация, вероятно, будет включать два запроса для чтения и записи, но меньше данных по сети.Но это компромисс.

...