У меня в MongoDB есть такая схема:

var Customers = new Schema({
    name: { type: String, trim: true, index: true, default: null, sparse: true },
    facebookId: { type: String, default: null, trim: true, index: true },
    friends: [friends]
});

var friends = new Schema({
    customer: { type: Schema.ObjectId, ref: 'Customers', required: true },
    lastGame: { type: Schema.ObjectId, ref: 'games', required: true, default: null },
    lastGameTime: { type: Date, default: null }
});

Теперь в массиве Друзья у меня есть ссылки на всех клиентов, которые являются друзьями конкретного клиента на Facebook.

Теперь я хочу, чтобы у меня был экран, на котором я хочу показать всех клиентов, но там я не хочу видеть тех клиентов, которые уже являются моими друзьями в Facebook, т.е. для примера предположим, что у меня всего 10 клиентов. от 1 до 10 , я клиент № 4 , у которого есть клиент 1,3,5,6 в массиве друзей , поэтому мой результат на экране должен быть пользователь 2,7,8,9,10

Я буду очень благодарен, если кто-нибудь подскажет мне путь к этому с помощью Query of MongoDb. Я искал и нашел использование $nin , но оно работает в простом массиве. Я не понимаю, как я могу реализовать этот запрос во встроенном документе, как в моем случае.

0
Shumi Gupta 24 Окт 2016 в 15:49

2 ответа

Лучший ответ

Я решил эту проблему, используя $ nin с простым подходом. Сначала я выбираю всех друзей определенного клиента в массиве, а затем с помощью $ nin отфильтровал все друзья из запроса и получил свой результат.

0
Shumi Gupta 25 Окт 2016 в 12:15

Загляните в $ elemMatch. Это позволит вам идентифицировать конкретный документ во встроенном массиве документов.

Документация ElemMatch MongoDB

Вы также можете использовать $ elemMatch в сочетании с $ nin

0
pieperu 24 Окт 2016 в 13:01