MongoDb$elemMatch未按预期工作

MongoDb$elemMatch未按预期工作,mongodb,Mongodb,我正在编写一个简单的查询,该查询使用带有propery标记的对象,如果满足以下条件,则必须返回一个文档: 它正好有3个项目 其中一个是:image 其中一个以:开头,但不是图像 其中一个不是以开头的: 所以我想要类型为{Tags:[“:image”,“:I任何东西”,“somethingelse”]} 我写了以下内容: db.myCollection.find({ Tags: { $elemMatch: { $eq: ":image" }, $elemMa

我正在编写一个简单的查询,该查询使用带有propery
标记的对象,如果满足以下条件,则必须返回一个文档:

  • 它正好有3个项目
  • 其中一个是
    :image
  • 其中一个以
    开头,但不是图像
  • 其中一个不是以
    开头的:
  • 所以我想要类型为
    {Tags:[“:image”,“:I任何东西”,“somethingelse”]}

    我写了以下内容:

    db.myCollection.find({
      Tags: {
        $elemMatch: {
          $eq: ":image"
        },
        $elemMatch: {
          $ne: ":image",
          $regex: /^:\w+$/
        },
        $elemMatch: {
          $regex: /^\w+$/
        },
        $size: 3
      }
    }).limit(50)
    
    但是它不能像预期的那样工作,并且返回像
    {Tags:[“:image”,“something”,“somethingelse”]}

    我哪里弄错了?

    您需要使用组合条件:

    db.myCollection.find({ $and: [
      { Tags: {
        $elemMatch: {
          $eq: ":image"
      } } },
      { Tags: {
        $elemMatch: {
          $ne: ":image",
          $regex: /^:\w+$/
      } } },
      { Tags: {
        $elemMatch: {
          $regex: /^\w+$/
      } } },
      { Tags: { $size: 3 } }
    ] });