gpt4 book ai didi

node.js - 有没有办法在 mongodb(mongoose) 的单个查询中创建 "stored procedure"调用多查询

转载 作者:可可西里 更新时间:2023-11-01 10:31:05 27 4
gpt4 key购买 nike

有没有办法在 mongodb 中创建“存储过程”?

例如一个访问mongodb一次但实际上调用多个集合的查询?(使用mongoose调用mongodb)

我知道 mongodb 有 serverside javascript .但不同的是,我不认为服务器端函数能够调用集合。例如,如果我有以下示例。

1。示例一(关系集合)

 mycollection1.findOne({_id: id}, function(err, result1){
mycollection2.findOne({_id: result1.id}, function(err, result2){
mycollection3.findOne({_id: result2.id}, function(err, result3){
return {};
});
});
});

2。示例二(非关系集合)

mycollection1.findOne({_id: id}, function(err, result1){
mycollection2.findOne({}, function(err, result2){
mycollection3.findOne({}, function(err, result3){
var someDataToDisplayToUI =
{
data1 : result1,
data2: result2,
data3: result3
};
return someDataToDisplayToUI;
});
});
});

我正在使用来自 express.js 服务器的 mongoose,目前 mongoose 调用了上述示例的三次。有没有办法调用一次?

最佳答案

MongoDB 不支持跨越多个集合 的查询。没有办法解决它。您必须在应用程序级别进行多个查询。你在做什么似乎是要走的路。这就是非关系数据库的陷阱。也许如果您需要经常进行这些调用,您最好使用关系数据库,或者最好重新考虑您的模式。

MongoDb 不是关系友好的。但是当您使用 mongoose 时,如果您有任何关系,您可以在跨多个集合的文档中进行引用,并使用一个名为 populate 的简洁选项从其他集合中获取数据。

Still mongoose will internally make two mongo queries

.此选项使定义关系变得更加容易。

检查 the docs .

填充一次不能用于多个级别。

 mycollection1.findOne({_id: id}).populate('id',null,','<Collection2 Model Name>',function(err,result1){
//result1.id will be your result2 in the question instead of an id
result1.id.populate('id.id',null,'<Collection3 Model>',function(err,result){
//result1.id.id is now your result3 in the question
})
});

关于node.js - 有没有办法在 mongodb(mongoose) 的单个查询中创建 "stored procedure"调用多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069903/

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