我有两个集合叫做user和subscription,每个subscription都有user_id,这是用户集合的id,我如何通过where条件和is_account_active = 1连接这两个集合?请检查下面的代码,我正在使用:
const users = await User.find({ is_account_active: 1 });
这将让我所有的用户有是_帐户_活动标志为1,但在同一时间,我想订阅的详细信息也与各自的用户ID。
2sbarzqh1#
您可以在下面查询。
const users = await User.aggregate([ { $match: { your_condition } }, { $lookup: { from: 'subscriptions', // secondary db localField: '_id', foreignKey: 'user_id', as: 'subscription' // output to be stored } } ]);
但是,如果您可以在主集合中使用一个新字段(如user_id),并且可以在该字段上使用自动增量(现在将自动插入具有新的唯一ID的新数据),而不是使用**_id**作为外部字段,那么情况会更好,并且您可以在该字段上创建索引以加快查询执行速度。
41ik7eoe2#
你可以使用aggregate函数,如果你把user_id作为字符串,并且你有mongo db版本〉= 4.0,那么你可以把_id转换成字符串(因为_id是一个ObjectId类型):
aggregate
_id
const users = await User.aggregate([ { $match: { is_account_active: 1 } }, { $project: { "_id": { "$toString": "$_id" } } }, { $lookup: { from: 'subscriptions', //collection name localField: '_id', foreignKey: 'user_id', as: 'subscription'. //alias } } ]);
但是,在订阅模式中将user_id存储为对象id是一个更好的主意
user_id: { type: mongoose.Schema.Types.ObjectId, ref:'User' }
那么
const users = await User.aggregate([ { $match: { is_account_active: 1 } }, { $lookup: { from: 'subscriptions', //collection name localField: '_id', foreignKey: 'user_id', as: 'subscription'. //alias } } ]);
More about ObjectIdMore about Aggregate function
bq9c1y663#
我现在正在使用Mongodb,Mathon的回答非常棒,我没有足够的信誉点在评论中说明这一点:我认为在“as”后面有一个离散的句号,参数foreignKey应该是foreignField --至少Mongodd 6.0.3在使用它和NodeJS时出现了一个错误。
const users = await User.aggregate([ { $match: { is_account_active: 1 } }, { $project: { "_id": { "$toString": "$_id" } } }, { $lookup: { from: 'subscriptions', //collection name localField: '_id', foreignField: 'user_id', as: 'subscription' //alias } } ]);
3条答案
按热度按时间2sbarzqh1#
您可以在下面查询。
但是,如果您可以在主集合中使用一个新字段(如user_id),并且可以在该字段上使用自动增量(现在将自动插入具有新的唯一ID的新数据),而不是使用**_id**作为外部字段,那么情况会更好,并且您可以在该字段上创建索引以加快查询执行速度。
41ik7eoe2#
你可以使用
aggregate
函数,如果你把user_id作为字符串,并且你有mongo db版本〉= 4.0,那么你可以把_id
转换成字符串(因为_id是一个ObjectId类型):但是,在订阅模式中将user_id存储为对象id是一个更好的主意
那么
More about ObjectId
More about Aggregate function
bq9c1y663#
我现在正在使用Mongodb,Mathon的回答非常棒,我没有足够的信誉点在评论中说明这一点:我认为在“as”后面有一个离散的句号,参数foreignKey应该是foreignField --至少Mongodd 6.0.3在使用它和NodeJS时出现了一个错误。