【问题标题】:Mongoose Query Subdocument Array Filtering Without Selected _idMongoose 查询子文档数组过滤而不选择 _id
【发布时间】:2019-08-29 14:09:49
【问题描述】:

我有 3 个用户。我想选择除一个以外的所有内容。 结果数组只有一项。
$elemMatch 只返回一个项目,但我想要除了这个 _id 之外的所有项目。 我正在解决这个问题,但我无法解决。

我的代码

const mongoose = require('mongoose') // v ^5.6.11

mongoose.connect('mongodb://localhost/test');


const UserSchema = new mongoose.Schema({
    _id: {
        type: mongoose.Schema.Types.ObjectId,
        auto: true
    },
    username: mongoose.Schema.Types.String,
    password: mongoose.Schema.Types.String
})

const ProjectSchema = new mongoose.Schema({
    _id: {
        type: mongoose.Schema.Types.ObjectId,
        auto: true
    },
    users: {
        type: [UserSchema]
    }
})

const ProjectModel = new mongoose.model('projects', ProjectSchema)


const query = ProjectModel.find({
    _id: '5d66ce383fc7e0263881bd39'
})


query.select({
    users: {
        $elemMatch: {
            $ne: {
                _id: '5d66ce383fc7e0263881bd3e'
            }
        }
    }
})

query.exec((error, data) => {
    if (error) {
        console.log('ERROR', error)
    } else {
        console.log('DATA', data)
    }
})

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您可以使用聚合来执行此操作。

    • 第一步:匹配id为5d66ce383fc7e0263881bd39的文档
    • 第 2 步:展开用户数组。
    • 第 3 步:再次使用 match 和 $ne 运算符。

      db.getCollection('projects').aggregate([ {'$match':{id:'5d66ce383fc7e0263881bd39'}}, { '$unwind':'$users' },{ '$match':{'users.id':{$ne:'5d66ce383fc7e0263881bd3e'}} } ]);

    【讨论】:

      猜你喜欢
      • 2021-10-23
      • 2017-08-15
      • 1970-01-01
      • 2019-07-13
      • 2018-01-26
      • 2020-10-27
      相关资源
      最近更新 更多