未选择_id

时间:2019-08-28 20:28:24

标签: node.js mongodb mongoose

我有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)
    }
})

1 个答案:

答案 0 :(得分:0)

您可以使用聚合来做到这一点。

  • 第1步:匹配ID为5d66ce383fc7e0263881bd39的文档
  • 第2步:展开用户数组。
  • 第3步:再次使用$ ne运算符进行匹配。

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