【问题标题】:Mongoose: Part of arrayMongoose:数组的一部分
【发布时间】:2015-09-27 19:30:15
【问题描述】:

我有这个MongoDB 通知模型:

  • 用户Mongo ID
  • 创建日期
  • 内容:{}
  • 订阅:[{用户Mongo Id读取布尔}]

NodeJS 中使用Mongoose 我创建了一个查询,该查询返回我的用户在Subscriptions 数组中的所有文档。

 Notification
    .find({subscriptions:{$elemMatch: {user: req.user}}})  
    .sort('-created')
    .exec(function (err, notifications) {

        if (err) {
            return res.status(400).send({
                message: errorHandler.getErrorMessage(err)
            });
        } else {

            res.jsonp(notifications);
        }
    });

此查询有效,并返回我想要的文档... 但我不想要这个... 此代码在返回的文档中返回所有订阅数组,包括其他用户。如果订阅数组中有 10.000 个用户,则在所有文档中返回所有用户。

如何提取数组的一部分?我希望只在订阅数组中返回我的用户。 为什么?出于安全和性能原因。

我试过这个查询:

    .find({subscriptions:{$elemMatch: {user: req.user}}}, {'subscriptions.$': 1})

此查询仅返回订阅数组中的一个用户(我的用户)。但是...除了订阅数组之外没有返回任何字段...

有什么建议吗?

【问题讨论】:

    标签: arrays node.js mongodb mongoose


    【解决方案1】:

    您可以像这样在结果中包含其他字段:

    .find({ 'subscriptions': { '$elemMatch': { 'user': req.user }}}, 
        { 'subscriptions.$': 1, 'content': 1, 'created': 1, 'user': 1 }
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 2021-06-13
      • 2014-09-02
      相关资源
      最近更新 更多