Nodejs mongoose 数组嵌套问题求助

Nodejs mongoose 数组嵌套问题求助

假设 在表中存储了一组数据,格式如下所示: { “name”:“", “hobby”:"[“AAA”,“BBB”,“CCC”]" }, { “name”:"”, “hobby”:"[“CCC”,“DDD”]" }, … 现在 我要查找所有hobby中有 “CCC”的用户,怎么查?

2 回复

当然可以!你提到的需求是使用 Mongoose 查找 hobby 数组中包含特定值(例如 "CCC")的文档。为了实现这一点,我们可以使用 Mongoose 的查询功能,特别是 $in$elemMatch 操作符。

示例代码

首先,我们定义一个 Mongoose 模型:

const mongoose = require('mongoose');

// 连接到 MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/testdb', { useNewUrlParser: true, useUnifiedTopology: true });

// 定义 Schema
const userSchema = new mongoose.Schema({
    name: String,
    hobby: [String]
});

// 创建模型
const User = mongoose.model('User', userSchema);

// 查询函数
async function findUsersWithHobby(hobby) {
    try {
        const users = await User.find({ hobby: { $in: [hobby] } });
        console.log(users);
    } catch (error) {
        console.error(error);
    }
}

// 调用查询函数
findUsersWithHobby("CCC");

解释

  1. 定义 Schema 和 Model:

    • 使用 mongoose.Schema 定义了一个简单的用户模式,其中包含 name 字段和一个 hobby 数组字段。
    • 使用 mongoose.model 创建了一个名为 User 的模型。
  2. 查询函数:

    • findUsersWithHobby 函数接受一个 hobby 参数,并使用 Mongoose 的 find 方法查询数据库。
    • 在查询条件中,我们使用了 $in 操作符来查找 hobby 数组中包含指定 hobby 的所有文档。
  3. 调用查询函数:

    • 我们通过传递 "CCC" 作为参数来调用 findUsersWithHobby 函数,从而获取所有 hobby 包含 "CCC" 的用户。

这样,你就可以通过简单的 Mongoose 查询找到满足条件的用户列表了。希望这对你有帮助!


要在使用 Mongoose 查找 hobby 数组中包含特定元素(例如 “CCC”)的所有文档时,你可以使用 Mongoose 的查询条件来实现。具体来说,可以使用 $elemMatch 或直接使用数组操作符来实现这一需求。

示例代码

首先,你需要定义一个 Mongoose 模型。假设你的集合名为 users

const mongoose = require('mongoose');

// 定义用户模型
const userSchema = new mongoose.Schema({
    name: String,
    hobby: [String]
});

const User = mongoose.model('User', userSchema);

接下来,你可以使用查询来查找所有 hobby 包含 "CCC" 的用户:

async function findUsersWithHobby(hobbyName) {
    try {
        const users = await User.find({ hobby: hobbyName });
        console.log(users);
    } catch (error) {
        console.error(error);
    }
}

findUsersWithHobby("CCC");

解释

  1. 模型定义:我们定义了一个包含 namehobby 字段的用户模型。其中 hobby 是一个字符串数组。
  2. 查询函数findUsersWithHobby 函数接受一个参数 hobbyName,用于指定要查找的 hobby 名称。
  3. 查询执行:我们使用 User.find({ hobby: hobbyName }) 来查询所有 hobby 中包含 hobbyName 的文档。Mongoose 会自动处理数组匹配,并返回所有符合条件的用户。

这种方式简单明了,无需额外复杂的查询条件。如果你有更多的匹配需求(例如同时匹配多个 hobby),可以使用更复杂的查询条件,如 $and$or

回到顶部