【问题标题】:Mongoose aggregate match nested documentMongoose 聚合匹配嵌套文档
【发布时间】:2015-02-08 07:59:34
【问题描述】:

我有以下架构:

var PostSchema = mongoose.Schema({
    idol: { type: Schema.Types.ObjectId, ref: 'User' },
    views: [ String ],
    likes: [ String ],
    ...
});


var UserSchema = mongoose.Schema({
    name: String,
    email: String,
    ...
});

我有以下聚合查询:

Post.aggregate([
    { $match : { '$idol.name' : new RegExp(query, 'gi') } },
    { $skip : page * 20 },
    { $limit : 20 }
], function(err, posts) {}

此代码返回以下错误:

[MongoError: exception: bad query: BadValue unknown top level operator: $idol.name]

有没有办法匹配嵌套文档中的内容?

谢谢。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    去掉'$idol.name'中的$,直接使用'idol.name'即可。这应该可以解决错误,但是,我认为这不起作用,因为您实际上并没有将用户对象存储在每个帖子中,而只是存储了 ObjectId。这意味着当 Mongo 尝试聚合时,它只会看到 ObjectId,而不是用户。

    【讨论】:

    • 我知道。我只需要知道是否有办法使用猫鼬填充聚合框架。
    • 不幸的是,这是不可能的。 Aggregate() 是 MongoDB 操作,而 populate() 是高级 Mongoose 抽象。调用 populate() 类似于调用两个 Mongo find() 调用。 Mongo 不能自己跨集合加入。
    猜你喜欢
    • 2014-03-04
    • 2023-03-26
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2020-07-26
    • 2021-06-04
    • 1970-01-01
    相关资源
    最近更新 更多