📜  如何在 mongoos 中查询对象数组 - Javascript (1)

📅  最后修改于: 2023-12-03 14:52:26.960000             🧑  作者: Mango

如何在 mongoose 中查询对象数组

在 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 中查询对象数组的方法。