请教 Node.js中采用mongoose如何实现mongodb的跨库查询?

请教 Node.js中采用mongoose如何实现mongodb的跨库查询?

请教:Node.js中采用mongoose如何实现mongodb的跨库查询?

问题补充:譬如在mongoose中采用connection创建连接,需要指定某个具体的库,如果在程序中想查询其他库中的数据,甚至于其他机器中的数据库是,mongoose是如何实现的呢?或者采用其他的mongodb驱动是如何实现的?

7 回复

在Node.js中使用Mongoose进行跨库查询是一个相对复杂的任务,因为Mongoose默认情况下是为单个MongoDB数据库设计的。不过,通过创建多个Mongoose连接实例,您可以实现对不同数据库的操作。

示例代码

首先,确保安装了Mongoose:

npm install mongoose

然后,你可以这样编写代码来实现跨库查询:

const mongoose = require('mongoose');

// 连接到第一个数据库
const db1 = mongoose.createConnection('mongodb://localhost:27017/db1', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

// 连接到第二个数据库
const db2 = mongoose.createConnection('mongodb://localhost:27017/db2', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

// 定义模型(假设我们在db1中有一个User模型)
const UserSchema = new mongoose.Schema({
    name: String,
    age: Number
});
const User = db1.model('User', UserSchema);

// 在db2中查询数据
const OtherModelSchema = new mongoose.Schema({
    info: String
});
const OtherModel = db2.model('OtherModel', OtherModelSchema);

async function run() {
    try {
        // 查询db1中的数据
        const users = await User.find();
        console.log(users);

        // 查询db2中的数据
        const otherModels = await OtherModel.find();
        console.log(otherModels);
    } catch (error) {
        console.error(error);
    }
}

run();

解释

  1. 创建连接:使用mongoose.createConnection()方法创建到不同数据库的连接。每个连接都指向不同的数据库(例如db1db2)。
  2. 定义模型:对于每个数据库,定义相应的模型。注意,模型是绑定到特定的数据库连接上的。
  3. 执行查询:使用模型执行查询操作。这里我们分别查询了db1db2中的数据。

这种方法允许你独立地管理多个数据库,并且可以轻松地在不同的数据库之间切换或组合查询结果。如果你需要查询另一个服务器上的数据库,只需将相应的连接字符串修改为正确的远程地址即可。


那就创建个其他库的连接呗…

用mongodb (native driver)不要用mongoose

有api让你切换数据库甚至是连接

有相关文档么,我在网上没有找到类似的文档,谢谢。

在Node.js中使用Mongoose进行MongoDB的跨库查询可以通过为每个数据库创建不同的连接来实现。虽然Mongoose默认情况下是针对单个数据库设计的,但你可以通过创建多个Mongoose连接来访问不同数据库的数据。

以下是一个简单的示例,演示了如何为两个不同的数据库创建连接,并从第二个数据库中查询数据:

const mongoose = require('mongoose');

// 创建第一个数据库的连接
const db1 = mongoose.createConnection('mongodb://localhost/mydb1', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

// 创建第二个数据库的连接
const db2 = mongoose.createConnection('mongodb://localhost/mydb2', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

// 在第一个数据库上定义一个模型(如果需要)
const UserSchema1 = new mongoose.Schema({
    name: String
});
const User1 = db1.model('User1', UserSchema1);

// 在第二个数据库上定义一个模型(如果需要)
const UserSchema2 = new mongoose.Schema({
    name: String
});
const User2 = db2.model('User2', UserSchema2);

// 示例查询操作
db2.collection('users').find({}).toArray((err, docs) => {
    if (err) throw err;
    console.log(docs);
});

在这个例子中,我们创建了两个Mongoose连接db1db2分别指向不同的数据库。为了从第二个数据库mydb2中查询数据,我们直接使用db2.collection('users').find({})进行查询,这与直接使用MongoDB的原生API非常相似。

注意事项:

  • 每个连接都是独立的,因此可以在不同的数据库之间自由切换。
  • 如果你需要在多个数据库间共享模式或模型,可能需要考虑将共享部分抽象出来或重新设计应用架构。
  • 确保所有连接都正确关闭以避免资源泄漏。

这种方式可以满足跨库查询的需求,同时保持Mongoose的易用性和灵活性。

回到顶部