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");
解释
-
定义 Schema 和 Model:
- 使用
mongoose.Schema
定义了一个简单的用户模式,其中包含name
字段和一个hobby
数组字段。 - 使用
mongoose.model
创建了一个名为User
的模型。
- 使用
-
查询函数:
findUsersWithHobby
函数接受一个 hobby 参数,并使用 Mongoose 的find
方法查询数据库。- 在查询条件中,我们使用了
$in
操作符来查找hobby
数组中包含指定 hobby 的所有文档。
-
调用查询函数:
- 我们通过传递
"CCC"
作为参数来调用findUsersWithHobby
函数,从而获取所有hobby
包含"CCC"
的用户。
- 我们通过传递
这样,你就可以通过简单的 Mongoose 查询找到满足条件的用户列表了。希望这对你有帮助!