2015-10-23 5 views
1

Предполагая следующую схему:MongoDB/мангуст найти общие элементы двух массивов

var user = { 
    books : [{bookId : {type: String, ref: 'Book'}}] 
}; 

и следующие данные:

user1.books[{bookId : 'id1'}, {bookId : 'id2'}] 
user2.books[{bookId : 'id2'}] 

, что это лучший способ найти пересечение между user1 и user2 книг? запрос, который скажет мне, что user1 и user2 имеют одну общую книгу с bookId: 'id2'.

спасибо.

ответ

1

Вы можете использовать агрегацию для того же:

//Assuming the user model is named User 
User.aggregate([ 
    {$match: {_id: {$in: [user1._id, user2._id]}}}, 
    {$group: {_id: 0, books1: {$first: "$books"}, books2: {$last: "$books"}}}, 
    {$project: {commonBooks: {$setIntersection: ["$books1","$books2"]}, _id: 0}} 
], function(err, res) { 
    console.log(err, res); 
}); 

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

Смежные вопросы