【问题标题】:Mongoose find/project in a complex structure [duplicate]猫鼬在复杂结构中查找/项目[重复]
【发布时间】:2018-04-27 18:03:13
【问题描述】:

在由对象和数组组成的结构中查找行时遇到问题。

这是我的猫鼬模式:

var subscriberSchema = mongoose.Schema({
    chkpt: {
        subDocs:[
            {
                id: String,
                newValues: {
                    attributes:[
                        {
                            _id: {
                                name: String
                            },
                            value: [
                                {
                                    string: String
                                }
                            ]
                        }
                    ]
                }
            }
        ] 
    }
});

这是我尝试在该架构上应用的请求:

Subscriber.find({'chkpt.modifiedSubDocs.newValues.attributes.id.name':'blabla'}, 'chkpt.modifiedSubDocs.newValues.attributes.value.string', function (err, subscribers) {
        if (err) return handleError(err);
        // Prints the json
        res.json(subscribers);

问题在于返回的 json 包含每个属性数组,其 id 中至少包含一个“blabla”。 我希望它只返回与“属性”数组行对应的值,该数组的 id 名为“blabla”。

如果您知道这样做的方法,请不要犹豫;)

谢谢,

【问题讨论】:

    标签: node.js mongodb mongoose schema


    【解决方案1】:

    您需要使用$ 放置运算符,在您的投影中,尝试放置chkpt.subDocs.$.newValues.attributes.$.value.string

    【讨论】:

    • 不幸的是,当我使用 $ 放置运算符时出现错误。 ReferenceError:handleError 未定义
    • 我不太了解 Mongoose,但我认为您需要为投影添加大括号,例如 Subscriber.find({'chkpt.subDocs.newValues.attributes.id.name':'blabla'}, {'chkpt.subDocs.$.newValues.attributes.$.value.string'}, function())
    • 感谢您的评论,但它不适用于大括号:(
    • 我看到您已经输入了modifiedSubDocs,而在您的架构中,该字段名为subDocs。您是否修改了查询以匹配正确的字段名称?
    • 是的,我在写主题时重命名了字段,但我忘记在查询中重命名...
    猜你喜欢
    • 2014-10-30
    • 2017-09-09
    • 1970-01-01
    • 2020-06-28
    • 2021-10-24
    • 2019-08-07
    • 2015-04-01
    • 2018-04-22
    • 2019-12-03
    相关资源
    最近更新 更多