node.js - mongodb/mongoose 查找两个数组中的共同元素

标签 node.js mongodb mongoose

假设以下架构:

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

以及以下数据:

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

找到 user1 和 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);
});

请注意,此查询只能查找两个人之间的共同书籍。

关于node.js - mongodb/mongoose 查找两个数组中的共同元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33293765/

相关文章:

javascript - 改进 npm 模块的设计

node.js - 正确使用异步函数

javascript - Mongodb:无法使用字符串字段名称附加到数组

node.js - 如何使用 findOneAndUpdate 更新子文档?

node.js - 使用 Backbone、Express 和 Mongoose 支持和反对

node.js - nodejs xbee 未收到消息

javascript - 从 OpenGraph 预览中再现视频 - 类型 "text/html"

具有 node.js 可读的多个键/值的 Node.js 环境变量?

javascript - 返回在循环中调用的回调结果的串联

mongodb - 仅查询Mongodb中的字段名