MongoDB aggergate中的NOT LIKE查询

时间:2019-05-20 08:23:33

标签: php mongodb mongodb-query aggregation-framework

我有一个查询,我想使用not like aggregate$match来实现$regex查询。

我希望结果中的nophoto中不要包含image url

所以我写的$ match查询是

[
  '$match'=>[
    'author.image'=>[
      '$ne'=>[
        '$regex'=>'/nophoto/'
      ]
    ]
  ]
],

但结果仍然是

[
  {
    _id: {
      $oid: "5cc2b26236d94e620335b6a3"
    },
    image: "https://images.gr-assets.com/authors/1397937527p7/46603.jpg"
  },
  {
    _id: {
      $oid: "5cc2b26236d94e620335b6a4"
    },
    image: "https://images.gr-assets.com/authors/1397937527p7/46603.jpg"
  },
  {
    _id: {
      $oid: "5cc2b26236d94e620335b6a5"
    },
    image: "https://s.gr-assets.com/assets/nophoto/user/u_333x500-46491541e26dbeac15f51487d68dd207.png"
  },
  {
    _id: {
      $oid: "5cc2b26236d94e620335b6a6"
    },
    image: "https://s.gr-assets.com/assets/nophoto/user/u_333x500-46491541e26dbeac15f51487d68dd207.png"
  }
]
  

我希望结果集的图片网址中没有nophoto

1 个答案:

答案 0 :(得分:1)

您必须使用$not查询来运算符来反对$regex字符串。

db.collection.find({
  'image': {
    '$not': {
      '$regex': "nophoto"
    }
  }
})

在PHP中看起来像这样

[
  '$match'=>[
    'image'=>[
      '$not'=>[
        '$regex'=>'nophoto'
      ]
    ]
  ]
]

MongoPlayground