mongodb Sping Boot Mongo:“$elemMatch需要对象”

9avjhtql  于 2023-05-06  发布在  Go
关注(0)|答案(1)|浏览(278)

所以我写了一个搜索查询,但被一个错误卡住了。
在MongoCompass中查询这个查询将返回正确的结果。

{$or: 
  [
    {'title': {$regex : "aard", $options: 'i'} },
    {'tags': {$elemMatch: {$regex : "aard", $options: 'i'} } },
    {'categories': {$elemMatch: {$regex : "aard", $options: 'i'} } }
  ]
}

但是,在spring Boot 中使用此查询会抛出错误:
查询失败,错误代码为2,错误消息为“$elemMatch需要对象”

@Query("{$or: [" +
  "{'title': {$regex: ?0, $options: 'i'} }, " +
  "{'tags': {$elemMatch: {$regex: ?0, $options: 'i'} } }," +
  "{'categories': {$elemMatch: {$regex: ?0, $options: 'i'} } }" +
  "] }")
List<Product> search(String input);

具有相同结果的较小示例代码:

@Query("{'categories': {$elemMatch: {$regex: ?0, $options: 'i'} } }")
List<Product> findByCategory(String category);

Mongo文档示例:

_id:1
supplier:DBRef(supplier, [object Object], undefined)
title:"Aardappels"
description:"Verse aardappels"
unitSize:"5KG"
categories:["Groente"]
tags:["Aardappels"]
price:14.99
salePrice:9.99
sale:true
amount:0
sold:0
_class: "nl.hva.ewaserver.models.Product"

很奇怪,它们都有相同的查询,但在spring Boot 中我使用参数。
这不应该是问题,因为我也测试了硬编码。

9jyewag0

9jyewag01#

我查询Mongodb(做聊天App)也是这样
下面是代码

let isChat = await Chat.find({
        isGroupChat: false,
        $and: [{ users: { $elemMatch: LoginUserID } }, { users: { $elemMatch: userId } }]  
    }).populate('users', '-password')

当我用$eq替换$elemMatch时,这个问题得到了解决。

相关问题