如何使用node.js将多个Mongodb查询组合成一个查询?
上下文: 我的数据库有两个集合:“用户”和“文件” “用户”集合中的示例文档:如何使用node.js将多个Mongodb查询组合成一个查询?,node.js,mongodb-query,Node.js,Mongodb Query,上下文: 我的数据库有两个集合:“用户”和“文件” “用户”集合中的示例文档: { "username":"Adam", "email":"adam@gmail.com", "IdFilesOwned":[1,3], } { "fileId":1, "name":"randomPNG.png" } { "fileId":2, "name":"somePDF.pdf" } { "fileId":3, "name":"business.pdf" } 如您所见,
{
"username":"Adam",
"email":"adam@gmail.com",
"IdFilesOwned":[1,3],
}
{
"fileId":1,
"name":"randomPNG.png"
}
{
"fileId":2,
"name":"somePDF.pdf"
}
{
"fileId":3,
"name":"business.pdf"
}
如您所见,Adam目前在服务器上拥有两个文件。他们的ID是1和3
“文件”集合中的示例文档:
{
"username":"Adam",
"email":"adam@gmail.com",
"IdFilesOwned":[1,3],
}
{
"fileId":1,
"name":"randomPNG.png"
}
{
"fileId":2,
"name":"somePDF.pdf"
}
{
"fileId":3,
"name":"business.pdf"
}
如您所见,我的服务器上有三个文档,每个文档都有一个id和一些元数据
现在,Adam想查看他拥有的所有文件及其元数据。我实现这一点的方式是:
1.查找Adam拥有的文件ID数组
2.让node.js遍历每个id(使用for-each循环),并查询每个id的元数据
问题是NodeJ将进行多个查询(每个id一个查询)。这似乎效率很低。因此,我的问题是,是否有更好的方法来实现这一点?我没有太多直接使用驱动程序的经验,但您应该能够做到以下几点
db.users.aggregate([
{
$lookup:{
从:“文件”,
localField:“IdFilesOwned”,
foreignField:“文件ID”,
as:“文件”
}
}
]);
您可以使用$in运算符
所以它看起来像这样
db.collection('files').find({ fileId: { $in: [<value1>, <value2>, ... <valueN> ] } })
db.collection('files').find({fileId:{$in:[,…]})
这肯定比查找更有效。祝你好运。你用的是什么驱动程序?另外,为什么不将文件存储在用户集合中(而不是
IdFilesOwned
,而是FilesOwned
)?@c1more我不与用户一起存储文件,因为我想添加与其他用户共享文件的功能(类似于google drive)。另外,我正在使用nodejs驱动程序3.4,您可以使用一个。我会尽量打一个更好的答案,但你可以用它来开始。谢谢。我去看看