node.js - 如何在 mongodb 的输出查询上添加条件字段?

标签 node.js mongodb mongoose

我的架构如下所示:

var productSchema = new Schema({
    name : String,
    likes : [{
        user_id : Schema.Types.ObjectId,
        date : Date
    }]
});

假设我有这个集合

{ 姓名:A,喜欢:[ {user_id:id1,日期:blahblah},{user_id:id2,日期:balh}] }

{ 姓名:B,喜欢:[ {user_id:id1,日期:blahblah}] }

{名称:C}

然后我想通过查询来显示以下输出

(with user_id = id1){ name : A, like : 1}, { name : B, like : 1}, { name : C, like : 0}

(with user_id = id2){ name : A, like : 1}, { name : B, like : 0}, { name : C, like : 0}

也就是说,我想添加新字段,此处称为“like”。

如果user_id存在于array(likes)中,则like为1,如果不存在,则应为零。

我可以做到这一点吗?

最佳答案

最好的方法是在用户架构中收集喜欢的产品 ID。因此,当有人喜欢产品时,您必须将 userId 添加到产品集合中,将产品 id 添加到用户集合中。这是 mongodb 中实现多对多关系的常用方法。可选,为了提高读取性能,您可以将产品名称非规范化为用户:

var userSchema = new Schema({
    name : String,
    likedProducts : [{
        _id : Schema.Types.ObjectId,
        productName: String
    }]
});

但请记住,非规范化会增加写入操作的开销。在产品名称更新时,您也会在用户集合中更新它。

关于node.js - 如何在 mongodb 的输出查询上添加条件字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14037017/

相关文章:

node.js - dockerize NestJS 和 TypeORM

node.js - 使用 npm 链接时如何修复 "Task is not in your gulpfile"错误?

mongodb - 用于 hyperledger composer API 的 Passport JWt 身份验证

javascript - async await node.js 跳过第二个 await 语句保存 mongodb

angularjs - 当我将数据保存到 mongoDB 时,如何在我的代码中获取 _id 值

javascript - 如何在 Node.js Express 应用程序中向用户提供下载窗口选项

node.js - 使用 node.js 的 Docker 开发工作流程

javascript - 如何将 100 万条记录异步保存到 mongodb?

node.js - Mongoosejs中动态填充聚合函数

javascript - 如何在 Mongoose 聚合中找到平均值