如何通过Criteria + Mongoose / MongoDB查找子文档

苏曼

以下是两种猫鼬模式:

EmployeeSchema:

var EmployeeSchema = new Schema({
    name : String,
    employeeDetailsId: {
        type: Schema.Types.ObjectId,
        ref: 'employeedetails'
    }
});

EmployeeDetailSchema:

var EmployeeDetailSchema = new Schema({
    employeeId: {
        type: Schema.Types.ObjectId,
        ref: 'employee'
    },
    statusId: {
        type: Schema.Types.ObjectId,
        ref: 'status'
    }
});

EmployeeDetailSchema数据按需保存,例如将特定状态分配给Employee时。在这种情况下,一旦保存了EmployeeDetail文档,则将相应的EmployeeDetailID保存为EmployeeSchemas作为employeeDetailsId

现在,EmployeeSchema和EmployeeDetailSchema之间存在双向关系。

用例:

我想获取所有标记有特定状态的员工。说输入状态ID,1234然后我要获取其状态ID1234在EmployeeDetail文档中的所有雇员

以下是我尝试使用Mongoose的方法:

exports.getEmployeesByStatus = function (req, res) {
    console.log('Status ID : ' + req.query.statusId);

    EmployeeModel.find({'employeeDetailsId.statusId': {$eq: mongoose.Types.ObjectId(req.params.statusId)}})
        .exec(function (err, result) {
            if (err)res.send('400', {message: 'Unable to fetch employees data by status. Please try again later'});

            res.jsonp(result);
        });
};

尽管有些员工被分配了某些状态,但返回的结果是空数组。我对Mongoose的查询方法正确吗?

谢沙布·罗伊(Shaishab Roy)

您正在根据架构设计使用EmployeeDetailSchemafor的引用employeeDetailsId因此您无法在没有填充的情况下直接比较参考模型字段。您应该先填充,然后比较和过滤文档,否则用户aggregate功能可以实现您的目标。

可以试试这个:

EmployeeModel.aggregate([
      {$lookup: {from: 'employeedetails', localField: 'employeeDetailsId',foreignField: '_id',as: 'details'}},
      {$match: { $and:[{ "details.statusId": { "$exists": true } },{"details.statusId": req.params.statusId}]} }
    ]).exec(function (err, result) {
            if (err) return res.send('400', {message: 'Unable to fetch employees data by status. Please try again later'});

            return res.jsonp(result);
        });

注意:String转换ObjectId的值req.params.statusId

{$match: {$and: [{"details.statusId": {"$exists": true}}, {"details.statusId": mongoose.Types.ObjectId(req.params.statusId)}]}}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MongoDB,Mongoose:如何在找到的文档中找到子文档?

来自分类Dev

通过ID查找文档并在Mongoose中过滤子数组

来自分类Dev

如何通过使用Mongoose查询子文档来查找父文档?

来自分类Dev

通过Mongoose将对象推入MongoDB子文档数组

来自分类Dev

Mongoose 如何通过 id 数组查找并拉出其特定的子文档?

来自分类Dev

如何通过ID与mongoose选择mongo子文档?

来自分类Dev

如何通过Mongoose虚拟字段查询MongoDB文档?

来自分类Dev

如何通过Mongoose虚拟字段查询MongoDB文档?

来自分类Dev

如何在MongoDB中查找并插入子文档数组列表?

来自分类Dev

如何在MongoDB中查找并插入子文档数组列表?

来自分类Dev

如何通过mongoose更新mongodb中的对象?

来自分类Dev

如何通过ID与mongoose一起选择mongo子文档?

来自分类Dev

如何在MongoDb中查找与数组中的字段和子文档字段匹配的文档

来自分类Dev

通过ID查找MongoDB文档

来自分类Dev

通过ID查找MongoDB文档

来自分类Dev

嵌入文档-Mongoose与MongoDB

来自分类Dev

查找包含特定值的子对象字段Mongoose的文档

来自分类Dev

Mongoose,MongoDB:如何在push()之后保存()文档?

来自分类Dev

Mongoose,MongoDB:如何在push()之后保存()文档?

来自分类Dev

如何在 mongoose/mongodb 中对子文档数组进行排序?

来自分类Dev

使用 findOne() 后如何从 mongoose/mongodb 文档中获取值

来自分类Dev

如果Mongoose数组中包含元素,则查找Mongodb文档

来自分类Dev

如何通过子文档数组中的数据查找文档

来自分类Dev

如何转换多个Mongoose文档?

来自分类Dev

MongoDB:如何通过嵌套文档中的ID查找文档

来自分类Dev

MongoDB-Mongoose:如何使用Mongoose同时更新两个单独的嵌入式文档?

来自分类Dev

使用聚合mongodb mongoose将collection子子文档与其他collection子文档连接

来自分类Dev

MongoDB / Mongoose-包含geoNear和子文档的聚合

来自分类Dev

MongoDB / Mongoose $ pull(删除)子文档不起作用

Related 相关文章

  1. 1

    MongoDB,Mongoose:如何在找到的文档中找到子文档?

  2. 2

    通过ID查找文档并在Mongoose中过滤子数组

  3. 3

    如何通过使用Mongoose查询子文档来查找父文档?

  4. 4

    通过Mongoose将对象推入MongoDB子文档数组

  5. 5

    Mongoose 如何通过 id 数组查找并拉出其特定的子文档?

  6. 6

    如何通过ID与mongoose选择mongo子文档?

  7. 7

    如何通过Mongoose虚拟字段查询MongoDB文档?

  8. 8

    如何通过Mongoose虚拟字段查询MongoDB文档?

  9. 9

    如何在MongoDB中查找并插入子文档数组列表?

  10. 10

    如何在MongoDB中查找并插入子文档数组列表?

  11. 11

    如何通过mongoose更新mongodb中的对象?

  12. 12

    如何通过ID与mongoose一起选择mongo子文档?

  13. 13

    如何在MongoDb中查找与数组中的字段和子文档字段匹配的文档

  14. 14

    通过ID查找MongoDB文档

  15. 15

    通过ID查找MongoDB文档

  16. 16

    嵌入文档-Mongoose与MongoDB

  17. 17

    查找包含特定值的子对象字段Mongoose的文档

  18. 18

    Mongoose,MongoDB:如何在push()之后保存()文档?

  19. 19

    Mongoose,MongoDB:如何在push()之后保存()文档?

  20. 20

    如何在 mongoose/mongodb 中对子文档数组进行排序?

  21. 21

    使用 findOne() 后如何从 mongoose/mongodb 文档中获取值

  22. 22

    如果Mongoose数组中包含元素,则查找Mongodb文档

  23. 23

    如何通过子文档数组中的数据查找文档

  24. 24

    如何转换多个Mongoose文档?

  25. 25

    MongoDB:如何通过嵌套文档中的ID查找文档

  26. 26

    MongoDB-Mongoose:如何使用Mongoose同时更新两个单独的嵌入式文档?

  27. 27

    使用聚合mongodb mongoose将collection子子文档与其他collection子文档连接

  28. 28

    MongoDB / Mongoose-包含geoNear和子文档的聚合

  29. 29

    MongoDB / Mongoose $ pull(删除)子文档不起作用

热门标签

归档