Node.js 如何使用Mongoose从MongoDB中的两个集合关系中查找计数
我想显示特定用户(_id:876896)的列表文件,其点击次数如下:Node.js 如何使用Mongoose从MongoDB中的两个集合关系中查找计数,node.js,mongodb,mongoose,mongoose-schema,Node.js,Mongodb,Mongoose,Mongoose Schema,我想显示特定用户(_id:876896)的列表文件,其点击次数如下: Sr.No.|文件名|单击计数 下面是我正在使用的示例模式: var clicks = mongoose.Schema({ file_id : String, IP : String }); var files = mongoose.Schema({ filename : String, owner : {type:mongoose.Schema.ObjectId, ref:'users'}, }
Sr.No.|文件名|单击计数
下面是我正在使用的示例模式:
var clicks = mongoose.Schema({
file_id : String,
IP : String
});
var files = mongoose.Schema({
filename : String,
owner : {type:mongoose.Schema.ObjectId, ref:'users'},
});
这项工作的效率如何。您可以通过两个步骤完成,首先获取所有引用您想要的用户数据的文件。然后,获取与您读取的文件相关的所有单击。 mongodb中没有内部连接 小例子:
files.find({
owner: {
$in: usersIdsArray // [_id, _id...] ids of all users
},
}).then((ret = []) => {
// Here ret is array of files
if (!ret.length) // There is no files matching the user
return clicks.find({
file_id: {
$in: Array.from(ret, x => x._id.toString()),
// build an array like [_id, _id, _id...]
},
});
}).then((ret = []) => {
// Here you have all clicks items
});
我还建议使用嵌入式架构而不是多个集合:
var clicks = mongoose.Schema({
file_id: String,
IP: String
});
var files = mongoose.Schema({
filename: String,
owner: {type:mongoose.Schema.ObjectId, ref:'users'},
});
变成:
var files = mongoose.Schema({
filename: String,
owner: {type:mongoose.Schema.ObjectId, ref:'users'},
clicks: [String], // With String your IP
});
MongoDB在大数据方面很好,但在关系方面却不太好