arrays - Mongoose 用数组元素的条件填充嵌套数组

标签 arrays node.js mongodb mongoose mongoose-populate

我有一个包含文章的文章组,模型看起来像这样

var ArticleGroup = new mongoose.Schema({
    articles:[{type:mongoose.Schema.Types.ObjectId,ref:'Article'}]
})

var Article = new mongoose.Schema({
    rates:[{
        uid:String,
        rate:Number //user's rate number to this article
    }]
})

现在 一个用户(我们称他为 JACK) 想要对 ArticleGroup 执行查询,填充该组中的文章,选择归档的费率

通常我会这样做

ArticleGroupModel
    .findById(articleGroupId)
    .populate('articles','rates')
    .select('articles')
    .exec((err, articleGroup) => {
         if (err) return next(err)
         //...
    })

但现在我只想要 JACK 的汇率 如果一篇文章有​​ JACK 的评分,就像这样返回那篇文章

{
    _id:"23jrf23orj89p3fwje4",
    rates:[{
        uid:"JACK's uid",
        rate:"JACK's rate number"
    }]
}

如果一篇文章没有 JACK 的费率,该文章仍会填充,但会像这样归档一个空的费率

{
     _id:"23jrf23orj89p3fwje4",
     rates:[]
}

有什么办法吗?

最佳答案

为了获得这个结果,您应该重新考虑您的数据模型,如下所示:

ArticleGroup = new mongoose.Schema
    some details here ...

ArticleRate = new mongoose.Schema
    uid: String
    rate: Number

Article = new mongoose.Schema
    group:
        type: mongoose.Schema.ObjectId
        ref: 'ArticleGroup'
    rates:[ArticleRate]

并执行这种查询:

Article
.find(group: groupId)
.populate({
   path: 'rates',
   match: { uid: { $in: { JACK_UID } } },
   select: 'rate'
 })
 .exec();

您可以在 Mongoose documentation 中找到更多有用的信息.

关于arrays - Mongoose 用数组元素的条件填充嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38323944/

相关文章:

arrays - 将 C 字符数组转换为字符串

node.js - 为 Gsuite SSO 生成带有 express 和 passport-saml 的 ACS url

Python:使用 numpy 保存/加载大数组

android - 解析数组中的嵌套数组

c++ - 对字符串数组进行基数排序?

java - 向 MongoDB 文档中的对象添加新字段

javascript - 如何删除mongodb中的深层数组?

javascript - 如何异步写入和读取 Node 中的同一文件?

javascript - Nodejs异步事件导致顺序错误

java - 流畅地使用 Vertx mongodb 客户端与内联与嵌套