Mongoose 查找数组中包含字符串的所有文档

Mongoose find all documents that have a string in an array

我有一个问题:
我如何使用猫鼬找到数组中包含字符串的所有文档?

比如我的文档:

<Model>.findMany(/* code that i need */).exec() // return all documents that have an array called "tags" that includes tag "test"
{
  "_id": {
    "$oid": "61b129b7dd0906ad4a2efb74"
  },
  "id": "843104500713127946",
  "description": "Server di prova",
  "tags": [
    "developers",
    "programming",
    "chatting",
    "ita"
  ],
  "shortDescription": "Siamo un server nato per chattare e aiutare programmatori su Discord!",
  "invite": "https://discord.gg/NdqUqHBxz9",
  "__v": 0
}

比如我需要获取所有带有ita标签的文档,我需要获取这个文档。 如果文档在数组标签中没有 ita 标签,我不需要它,代码也不会 return 它。

提前致谢,抱歉英语不好。

实际上,您可以只请求要测试的标签,因为 mongoose 会查找每个标签条目

所以这样:

await Test.insertMany([{ tags: ["test"] }, { tags: ["Notest"] }])

let res = await Test.find({ "tags": "test" })
console.log(res)
    }

returns 即:

[
  {
    _id: new ObjectId("61b8af02c3effad21a5d7187"),
    tags: [ 'test' ],
    __v: 0
  }
]

另外 2 件需要知道的事情:

  1. 无论标签有多少条目,只要 long test 是 ethem 之一,这都有效
  2. 这也使您能够通过使用位置 $ 运算符更改包含“测试”的条目,因此类似 {$set: "tags.$": "smthNew"} 的内容将更改所有测试条目

第二个示例:

let res = await Test.updateMany({ "tags": "test" }, { $set: { "tags.$": "new" } }, { new: true })