【问题标题】:Mongoose find where array contains at least one object that matches with an idMongoose 查找数组包含至少一个与 id 匹配的对象的位置
【发布时间】:2020-09-23 09:59:44
【问题描述】:

我正在使用猫鼬。我有以下型号:

person = {
    name: String,
    projects: [
        {
            projectId: {
                type:mongoose.Schema.Types.ObjectId,
                required:true
            },
            userNotes: {
                type: String
            }
        }
    ]
};

我希望能够在列表const projectIds = ['aafefaeiIE2afd', 'afeaf33afe','gg3r3a'] 中找到至少拥有一个项目 ID 为 projectId 的所有用户。我试着做这样的事情:

const results = Person.find({projects:{$exists:true,$contains:projectIds}});

但这显然行不通,因为 a) mongoose 没有 $contains 和 b) person.projects 是对象数组而不是字符串数组,我需要匹配对象 projectId .

如何让猫鼬执行我正在寻找的查询?

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    我不确定这是否正是您正在寻找的,但据我了解,这可能会有所帮助。

    db.collection.find({
      "projects": {
        "$elemMatch": {
          "projectId": {
            "$in": [
              "aafefaeiIE2afd" //<-- You can use your array here instead
            ]
          }
        }
      }
    })
    

    Playground link

    【讨论】:

    • 我将db.collection 替换为Person。但这返回了零结果。请注意,我在 NodeJS 应用程序中使用 Mongoose,而不是直接使用 mongodb 数据库。有没有办法让我从 mongoose “注入原始查询”到 mongodb?
    • 能否提供样本数据进行查询? Mongoose 是 MongoDB 的包装器,因此所有查询都应该工作
    【解决方案2】:

    您可以使用点符号和$in 来解决它:

    Person.find({
      "projects.projectId": {
        $in: your_array
      }
    })
    

    Mongo Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多