#node.js #mongodb #mongoose #mongodb-query
#node.js #mongodb #мангуст #mongodb-запрос
Вопрос:
У меня есть подобная схема в 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 }
});
Теперь в массиве friends у меня есть ссылки на всех клиентов, которые являются Facebook-друзьями конкретного клиента.
Теперь то, что я хочу сделать, это у меня есть экран, на котором я хочу показать всех клиентов, но там я не хочу видеть тех клиентов, которые уже являются моими друзьями Facebook, т. Е. Для примера давайте предположим, что у меня всего 10 клиентов от 1 до 10, я клиент № 4, у которого есть клиент 1,3,5,6 в массиве друзей, поэтому мой результат на экране должен быть для пользователя 2,7,8,9,10
Я буду действительно благодарен, если кто-нибудь сможет подсказать мне путь к этому материалу, используя запрос MongoDB. Я искал и нашел $nin
использование, но это работает в простом массиве. Я не понимаю, как я могу реализовать этот запрос во встроенном документе, как в моем случае.
Ответ №1:
Посмотрите на $ elemMatch. Это позволит вам идентифицировать конкретный документ во встроенном массиве документов
elemMatch документация MongoDB
Вы также можете использовать $elemMatch в сочетании с $ nin
Ответ №2:
Я решил эту проблему, используя $ nin с помощью простого подхода: сначала я выбираю всех друзей конкретного клиента в массиве, затем, используя $ nin, я отфильтровал всех друзей из запроса и получил свой результат.