mongodb / mongoose在两个数组中find常用元素

假设以下模式:

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

和以下数据:

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

finduser1和user2书籍交集的最佳方法是什么? 一个查询会告诉我,user1和user2与bookId:'id2'共有一本书。

谢谢。

你可以使用相同的聚合:

 //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); }); 

请注意,此查询只能在两个人之间find常用书籍。