【问题标题】:How to query all documents where array field have at least one object-element with property equal 'X'?如何查询数组字段至少有一个属性等于“X”的对象元素的所有文档?
【发布时间】:2020-04-10 14:39:13
【问题描述】:

我有一些这样的 MongoDB 文档:

{
"group": "P32666",
"order": [{
    "_id": {
        "$oid": "5e8e9b40e7999f6b90fd88bf"
    },
    "name": "Dmitriy A",
    "login": "example",
    "password": "example",
    "email": "example",
    "level": "user",
    "uuid": "b6a19744-bb20-4d39-9e1e-0ca5b464f890"
}, {
    "_id": {
        "$oid": "5e8ea03f5a21c26b90983de4"
    },
    "name": "Dmitriy B",
    "login": "example",
    "password": "example",
    "email": "example",
    "level": "user",
    "uuid": "556924c3-605c-44cc-8a26-d32f58222e89"
}, {
    "_id": {
        "$oid": "5e8ea0645a21c26b90983de5"
    },
    "name": "Dmitriy C",
    "login": "example",
    "password": "example",
    "email": "example",
    "level": "user",
    "uuid": "aef00707-ef00-4ce9-918b-5cef17e7280b"
}]}

我在 Mongoose 中使用 Mongo,无法理解如何查询字段(数组)“order”在其中字段中至少有一个对象的所有文档(如上),例如,“login”是 queal为“示例”。我该怎么做?

我尝试过这样的事情:

export async function getQueues(request: Request, response: Response) {
  const returningQueues = await queues.find({order: [login: request.params.login]});
  response.json(returningQueues);

但是 TypeScript 错误(56 个缺失的“用户”类型的属性(主要是内部 Mongoose 的),我存储在一个数组中)表明我的想法是错误的。

【问题讨论】:

    标签: node.js mongodb typescript express mongoose


    【解决方案1】:

    如果您在数组字段上只有一个条件,您可以简单地这样做:

    queues.find({"order.login": request.params.login})
    

    但如果你有多个条件,你可以使用$elemMatch

    queues.find({
      order: { $elemMatch: { login: request.params.login, name: request.params.name } } 
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多