简体   繁体   English

猫鼬通过子文档的_id查找文档

[英]mongoose find document by subdocument's _id

Let say I have the following structure: 假设我具有以下结构:

var Partner = require('../partner/partner.model');

var ContractSchema = new Schema({
      // blahblah
      partners: [Partner.schema]
});

So here every contract has an array of partners, and each partner has an _id property. 因此,这里每个合同都有一系列合作伙伴,每个合作伙伴都有一个_id属性。

I want to search for a contract, which has a partner with a specific _id . 我想搜索一个合同,其中有一个具有特定_id的伙伴。 I tried this, but didn't work: 我试过了,但是没用:

  var ObjectId = require('mongoose').Types.ObjectId;    
  Contract.find({
      partners: {
        $elemMatch: {
          _id: {
            $eq: new ObjectId(req.query.partnerId)
          }
        }
      }
    }, function (err, serviceContracts) {
      if (err) {
        return handleError(res, err);
      } else {
        return res.status(200).json(serviceContracts);
      }
    });

EDIT: Here's an example what I have in the db: 编辑:这是我在数据库中的示例:

{
    "_id" : ObjectId("57e370e72beac9fc21c99ca3"),
    "updatedAt" : ISODate("2016-09-22T05:49:27.000Z"),
    "createdAt" : ISODate("2016-09-22T05:49:27.000Z"),
    "currency" : "USD",
    "partners" : [ 
        {
            "updatedAt" : ISODate("2016-09-22T05:49:27.000Z"),
            "createdAt" : ISODate("2016-09-22T05:49:27.000Z"),
            "name" : "Apple Inc.",
            "_id" : ObjectId("57e370e72beac9fc21c99caa")
        }
    ],
    "__v" : 0
}

As @robertklep said, this is working: 就像@robertklep所说的,这是有效的:

Contract.find({ "partners._id": req.query.partnerId})
  .then(function(contracts) {
    return res.status(200).json(contracts);
  })
  .catch(function(err) {
    return handleError(res, err);
  });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM