简体   繁体   English

MongoDB,聚合 $match 不适用于 ObjectId

[英]MongoDB, Aggregate $match not working on ObjectId

I have a schema that is:我有一个架构是:

var photoSchema = new mongoose.Schema({
    id: String,     // Unique ID identifying this photo
    file_name: String,
    date_time: {type: Date, default: Date.now},
    user_id: mongoose.Schema.Types.ObjectId, // The user id of the user who created the photo.
    comments: [commentSchema] // Comment objects representing the comments made on this photo.
});

var Photo = mongoose.model('Photo', photoSchema);

I am trying to find the photo from a specific user with most number of comments.我试图从评论数量最多的特定用户那里找到照片。 Here is what I have done:这是我所做的:

Photo.aggregate([
        {
            $project: {
                id: 1,
                file_name: 1,
                date_time: 1,
                user_id: 1,
                comments: 1,
                length: {$size: "$comments"}
            }
        },
        {
            $match: {
                user_id: mongoose.Schema.Types.ObjectId(request.params.id)
            }
        },
        {
            $sort: { length: -1 }
        }
        ], function (err, info2){
            if (err) {
                    // Query returned an error.
                    console.error('Doing /user/usage/:id error:', err);
                    response.status(400).send(JSON.stringify(err));
                    return;
            }
            console.log(info2);
            finalOutput.most_commented = info2[0];
            response.end(JSON.stringify(finalOutput));
        });

I only get an empty array [] in the console.log, I know the $match is not working because if I remove $match clause, it gives me the photo with max comments across the entire table.我只在 console.log 中得到一个空数组 [],我知道 $match 不起作用,因为如果我删除 $match 子句,它会为我提供整个表中带有最大评论的照片。 I want to filter and get the photo which belong to 1 specific user, based on their user_id.我想根据他们的 user_id 过滤并获取属于 1 个特定用户的照片。

I don't understand what I am doing wrong.我不明白我做错了什么。 I have tried:我试过了:
1. $match: {user_id: mongoose.Schema.Types.ObjectId(request.params.id)} 1. $match: {user_id: mongoose.Schema.Types.ObjectId(request.params.id)}
2. $match: {user_id: request.params.id} 2. $match: {user_id: request.params.id}
3. $match: {"user_id": request.params.id} 3. $match: {"user_id": request.params.id}

First Step第一步

const ObjectId = require('mongoose').Types.ObjectId

Second Step第二步

{ $match : { _id: ObjectId("606c74d5f9e3f30f8caa3451")} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM