当前位置: 首页 > 知识库问答 >
问题:

猫鼬/MongoDB聚合-$匹配$解除$匹配不工作?

陆承宣
2023-03-14

如何将此存档视图聚合更改为也从中聚合。看法档案:真的吗?

...同时防止重复消息的聚合...如果To数组中存在来自用户(会话用户),则只获取其中一条消息...

 if (archive === true) {
  console.log('archive === ' + true);

  Models.Message.aggregate([

     // Match documents
     { "$match": {
          "to": { 
              "$elemMatch": {
                 "username": req.session.username,
                 "view.archive": true,
                 "view.bin": false
              }
          },
          "$or": messagingquery
     }},

     // Unwind to de-normalize
     { "$unwind": "$to" },

     // Match the array elements      
     { "$match": {
         "to.username": req.session.username,
         "to.view.archive": true,
         "to.view.bin": false
     }},

     // Group back to the original document
     { "$group": {
         "_id": "$_id",
         "from": { "$first": "$from" },
         "to": { "$push": "$to" },
         "message": { "$first": "$message" },
         "timesent": { "$first": "$timesent" },
         "replies": { "$first": "$replies" },
         "messaging": { "$first": "$messaging" }
     }},

     // Sort by updated, most recent first (descending)
     {"$sort": {"updated": -1}}

  ], function (err, messages) {

    if (err) {
      console.log(err);
      res.send(err);
    }

    res.json({
      messages : messages,
      sessionUser: sessionUser
    });

  });

}

UserMessageSchema对于两个源都是这样的

var UserMessageSchema   = new Schema({
  user        : { "type": Schema.ObjectId, "ref": "User" },
  username    : String,
  view : {
    inbox       : Boolean,
    outbox      : Boolean,
    archive     : Boolean,
    bin         : Boolean
  },
  read : {
    marked      : { "type": Boolean, default: false },
    datetime    : Date
  },
    updated   : Date
});

共有1个答案

胡星汉
2023-03-14

我觉得我一定是误解了一些情况,但是听起来你应该能够在第一个匹配阶段添加一个简单的$或

{ "$match": {
    "$or" : [
        {
            "to": { 
                  "$elemMatch": {
                      "username": req.session.username,
                      "view.archive": true,
                      "view.bin": false
                  }
            }
        },
        {
            "from" : {
                "$elemMatch" : {
                    "username" : req.session.username,
                    "view.archive": true,
                }
            }
        }
    ],
        "$or": messagingquery
 }}

复制不能产生于$Match阶段,因为$Match根据条件筛选文档。重复从何而来,“重复”到底是如何定义的?

 类似资料:
  • 是否可以在$match中执行OR? 我的意思是这样的:

  • 我想知道如何使用mongodb 3.2的java驱动程序对$lookup集合执行聚合$match。下面是我正在处理的两个集合的结构: 对两个 id (coll_one.foreign_id 的查找 这是我正在使用的Java代码: 当我移除火柴部分时,一切都很好。我尝试了这么多的可能性组合,但都没有成功!!! 有人能告诉我这是否可能吗????

  • 我有一个包含嵌套文档集合的文档: 映射如下所示: 我想做的是下一个聚合: 通过这样的查询,我得到的结果如下所示: 但我想要的是,只有带有键轮的结果才会出现在结果存储桶中(或与whe搜索字符串匹配的任何其他结果)。 希望问题足够清楚。我做错了什么?是否有任何建议或更改数据结构或查询? UPD:添加my\u custom\u analyzer以供参考:

  • 我尝试检查密码与功能password_verify发布的用户密码和散列从数据库。 首先,我如何生成密码和哈希: 登录时验证: 总是收到密码错误的消息。我阅读了这个php密码\u散列和密码\u验证问题没有匹配,但我手动测试了散列字符串,以验证文本字符串。 哈希字符串:$2y$10$SwSq7OukPpN/QJ8YOdKgquJQ28fQbNY1Q3JdTFnoe。2VxD/D2RXBS 通过电子邮件

  • 我想同时执行精确的单词匹配和部分单词/子字符串匹配。例如,如果我搜索“test product”,那么我应该能够在结果中找到“test”和“product”相关的文本。我用下面的match查询搜索弹性搜索,它不是给我精确的匹配,而是给我一些更多的不确定的匹配。示例是在结果中给出与“sample”相关的文本。 我使用弹性搜索6.3 请在下面找到我的查询 搜索结果:“Hits”:[{“_index”:

  • 本文向大家介绍MongoDB精确数组匹配,包括了MongoDB精确数组匹配的使用技巧和注意事项,需要的朋友参考一下 对于精确的数组匹配,只需在MongoDB中使用。让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 这是对MongoDB数组匹配的查询- 这将产生以下输出-