📅  最后修改于: 2023-12-03 14:52:26.960000             🧑  作者: Mango
在 mongoose 中,我们可以使用 find
方法来查询文档,但是如果文档中有对象数组,我们需要特殊处理才能查询到所需的数据。
如果我们想要查询对象数组中的单个元素,可以使用以下方法:
Model.findOne({ 'array.field': value }, function(err, result) {
// ...
});
这将查询到包含所需元素的文档,并返回该文档的第一个匹配项。
当我们需要查询对象数组中的多个元素时,可以使用 $and
和 $elemMatch
运算符来实现:
Model.find({
$and: [
{ 'array.field1': value1 },
{ 'array.field2': value2 }
]
}).find({
'array': {
$elemMatch: {
'field3': value3,
'field4': value4
}
}
}).exec(function(err, results) {
// ...
});
以上示例中,我们使用了两个 find
方法来查询多个元素。第一个 find
方法使用 $and
运算符来查询符合条件的文档。第二个 find
方法使用 $elemMatch
运算符来匹配包含符合条件的元素的文档。
如果我们需要查询对象数组中的指定元素,可以使用 $slice
运算符来实现。例如,我们想要查询前五个元素:
Model.find({}).slice('array', 5).exec(function(err, results) {
// ...
});
使用 slice
方法,我们可以指定要查询的元素数量以及要查询的元素的偏移量。
以下示例演示如何在 mongoose 中查询对象数组:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
name: String,
hobbies: [
{
name: String,
level: Number
}
]
});
const UserModel = mongoose.model('User', UserSchema);
UserModel.find({}).slice('hobbies', 5).exec(function(err, results) {
if(err) console.log(err);
console.log(results);
});
在以上示例中,我们定义了一个包含对象数组的模式。然后,我们使用 find
方法来查询所有文档,并使用 slice
方法来指定要查询的元素数量。最后,我们打印查询结果。
以上就是在 mongoose 中查询对象数组的方法。