gpt4 book ai didi

node.js - 如何使用 Mongoose 从 MongoDB 中的两个集合关系中查找计数

转载 作者:可可西里 更新时间:2023-11-01 09:34:47 25 4
gpt4 key购买 nike

我想显示特定用户 (_id: 876896) 的列表文件,其点击次数如下:

先生。编号 |文件名 |点击次数

下面是我正在使用的示例模式:

var clicks = mongoose.Schema({
file_id : String,
IP : String
});

var files = mongoose.Schema({
filename : String,
owner : {type:mongoose.Schema.ObjectId, ref:'users'},
});

这样做的效率如何。

最佳答案

您可以分两步完成,首先获取所有引用您想要数据的用户的文件。然后,获得与您阅读的文件相关的所有点击。mongodb中没有INNER_JOIN

小例子:

     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 在大数据方面表现不错,但在关系方面就没那么好了。

关于node.js - 如何使用 Mongoose 从 MongoDB 中的两个集合关系中查找计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39921004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com