Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mongodb中的regex$匹配中使用聚合字段?_Mongodb_Aggregation Framework - Fatal编程技术网

如何在mongodb中的regex$匹配中使用聚合字段?

如何在mongodb中的regex$匹配中使用聚合字段?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我的用例的一个非常简化的版本是查找以作者姓名开头的所有帖子,如下所示: > db.users.find(); { "_id" : ObjectId("5c4185be19da7e815cb18f59"), "name" : "User1" } { "_id" : ObjectId("5c4185be19da7e815cb18f5a"), "name" : "User2" } db.posts.insert([ {author : ObjectId("5c4185be19da7e815

我的用例的一个非常简化的版本是查找以作者姓名开头的所有帖子,如下所示:

> db.users.find();
{ "_id" : ObjectId("5c4185be19da7e815cb18f59"), "name" : "User1" }
{ "_id" : ObjectId("5c4185be19da7e815cb18f5a"), "name" : "User2" }

db.posts.insert([
  {author : ObjectId("5c4185be19da7e815cb18f59"), text: "User1 is my name"},
  {author : ObjectId("5c4185be19da7e815cb18f5a"), text: "My name is User2, but this post doesn't start with it"}
]);
所以我想确定所有以作者名字开头的帖子。我正在尝试使用这样的聚合,但我不知道如何从聚合管道中提取用户名以用于正则表达式匹配:

db.users.aggregate([
  {
    $lookup: {
      from: "posts",
      localField: "_id",
      foreignField: "author",
      as: "post"
    }
  },
  {
    $match: { "post.text": { $regex: "^" + name}}
  }
]).pretty();

这里的“name”不是定义的东西,我需要从管道上一步的users集合条目中提取名称。不知什么原因,我不知道该怎么做

这可能是超级简单,我绝对觉得在这里厚如砖头…任何帮助高度赞赏

您可以使用下面的


我不明白这会有什么帮助,也不明白它为什么会起作用。名称没有定义,现在它只是在第一次匹配时直接失败…?也许我的问题不够清楚。名称来自“用户”集合,我稍后想将使用正则表达式与帖子文本进行匹配。然后请尝试进一步解释您的问题添加另一段来解释“名称”是我试图从聚合的前一步中提取的内容。啊,似乎在操场上使用4+,但不幸的是我在3.4.18:$lookup的参数必须是字符串,让:{authorId:\“$\u id\”,name:\“$name\”}是类型对象“”,但谢谢,很快就会升级@AnthonyWinzlet类型对象的情况是什么?如何将regexp用于对象类型?MongoError:$indexOfCP需要一个字符串作为第一个参数,找到:object
db.users.aggregate([
  { "$lookup": {
    "from": "posts",
    "let": { "authorId": "$_id", "name": "$name" },
    "pipeline": [
      { "$match": {
        "$expr": {
          "$and": [
            { "$ne": [{ "$indexOfCP": ["$text", "$$name"] }, -1] },
            { "$eq": ["$author", "$$authorId"] }
          ]
        }
      }}
    ],
    "as": "post"
  }}
])