如果在对象数组中找到用户id,则返回true / false

时间:2017-10-01 17:33:53

标签: mongodb mongoose mongodb-query aggregation-framework

我是mongodb的新手。我正在以下架构中保存用户推荐。我正在保存用户喜欢该业务的日期。如果用户数组中存在用户ID(uid),我只想返回true / false。

const userSchema = new Schema({
    uid: { type: String},
    createdAt: { type: Date, default: Date.now() },
    _id: false
});

const businessRecommendationsSchema = new Schema({
    businessID: { type: String, unique: true},
    users: [userSchema]
},{
    timestamps: true
});

我不希望返回整个对象(如果存在),但只返回false。请帮忙。

示例数据:

{
    "businessID": "35M1L66a8YXzKmDYvbya3sHGJkH2",
    "updatedAt": {
        "$date": "2017-09-27T10:03:01.866Z"
    },
    "createdAt": {
        "$date": "2017-09-27T10:03:01.866Z"
    },
    "users": [
        {
            "uid": "PFwwUecwpFhhWCbJEaFjmfnGOix1",
            "createdAt": {
                "$date": "2017-09-27T10:03:01.867Z"
            }
        }
    ]
}

我尝试了下面的查询,但这只有在简单数组不是对象数组时才有效。

Business.aggregate()
.match({ businessID: req.params.businessID })
.lookup({ from : 'businessrecommendations', localField: 'businessID', foreignField: 'businessID',
as: 'recommendations' })
.project({_id: 0, businessID: 1, businessName: 1,
recommendedBy: { $arrayElemAt: [ "$recommendations", 0]}})
.project({_id: 0, businessID: 1, businessName: 1,
recommended: { $in : [req.query.uid, "$recommendedBy.users"]}});

0 个答案:

没有答案