我的架构如下所示:
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/