我怎样才能在mongodb的输出查询上添加条件字段?

我的模式如下所示:

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

假设我有这个集合

{ name : A, likes : [ {user_id : id1, date : blahblah}, {user_id : id2, date : balh}] }

{ name : B, likes : [ {user_id : id1, date : blahblah}] }

{ name : C }

然后我想通过查询它来显示

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

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

所以说,我想添加一个新的领域,在这里被称为“像”。

如果user_id存在于数组(like)中,则为1,否则应为零。

我可以做到这一点吗?

最好的方法是在用户模式中收集喜欢的产品ID。 所以当有人喜欢产品时,您必须将userId添加到产品集合和产品ID中以用于用户集合。 这是在MongoDB中实现多对多关系的常用方法。 可选,为了提高读取性能,您可以将产品名称归一化为用户:

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

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

对于您的Schema,您应该执行以下查询:

 db.collection.find({ likes: { $elemMatch: { user_id: idX }}}); 

这样,您将获得具有idX userId条目的产品。 所有其他人都没有user数组在likes数组。 使用这种方法,您需要将输出添加为1 ,其他输出中不包含0

你没有提到userId是否可以在同一个数组中有不同的条目,因为这会改变这个问题。