我具有Room对象的以下结构。
type Room struct {
Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
Title string `json:"title" bson:"title"`
Description string `json:"description" bson:"description,omitempty"`
Type string `json:"type" bson:"type,omitempty"`
AdminId bson.ObjectId `json:"admin_id" bson:"admin_id"`
CreatedOn time.Time `json:"created_on" bson:"created_on"`
Messages []Message `json:"messages" bson:"messages,omitempty"`}
其中,消息是具有以下结构的对象的嵌套数组
type Message struct {
Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
Text string `json:"text" bson:"text"`
Author Author `json:"author" bson:"author"`
CreatedOn time.Time `json:"createdon" bson:"created_on"`
Reply []Message `json:"reply" bson:"reply,omitempty"`}
我想通过房间集合中的消息执行搜索查询。我尝试使用,"$in"
但没有帮助我。
而且,我必须通过匹配值来搜索元素。我可以使用bson正则表达式来做到这一点。
&bson.RegEx{Pattern: textToFind, Options: "i"}
总结我需要按Text
“房间”文档中嵌套对象中的字段搜索消息。
PS对不起,可能会出现错误,英语不是我的母语。
更新
基本上,我想在给定的房间中找到包含某些子字符串的所有消息。例如,搜索房间(聊天)“ A”中包含“某些文本”子字符串的所有消息。
您可以尝试下面的mongo shell聚合管道。
$match
在某些房间属性(例如_id
)上。
$unwind
消息(将messages
数组转换为object)在房间里。
$match
在输入正则表达式上针对text
要过滤的字段messages
。
$group
将消息对象放回到messages
数组中。
$project
排除_id
并仅包括messages
用于输出。
db.collection.aggregate(
{$match:{"_id":roomid}},
{$unwind:"$messages"},
{$match:{"messages.text": { $regex: /textToFind/i } }},
{$group:{_id:null,messages:{$push:"$messages"}}},
{$project:{_id:0, messages:1}})
以下是未经测试的mgo当量。
match1 := bson.M{
"$match": bson.M{
"_id": roomid,
},
}
unwind := bson.M{
"$unwind": "$messages",
}
match2 := bson.M{
"$match": bson.M{"messages.text": &bson.RegEx{Pattern: textToFind, Options: "i"}},
}
group := bson.M{
"$group": bson.M{
"_id": null,
"messages": bson.M{
"$push": "$messages",
},
},
}
project := bson.M{
"$project": bson.M{
"_id": 0,
"messages":1,
},
}
all := []bson.M{match1, unwind, match2, group, project}
pipe := collection.Pipe(all)
result := []bson.M{}
err := pipe.All(&result)
问题内容: 我对ES还是相当陌生,并正在将其用于我的新项目。首先,我为客户提供了一个简单的映射,其中包含名字和姓氏以及付款信息对象列表。如果我在SQL中执行此操作,那将类似于客户表和具有1:许多关系的付款信息表。 这是我要执行的操作的一个简单示例:https : //gist.github.com/anonymous/6109593 我希望根据payInfos嵌套数组中的任何匹配项找到任何客户,即
基本问题如下:有没有一种方便的方法可以为嵌套查询的所有字段指定多字段匹配?对于普通查询有效。这在嵌套查询中不起作用,可能是因为嵌套对象没有_all? 下面是更详细的问题: 我有一个名为“Parent”的嵌套文档,如下所示: 这是我用于制作儿童嵌套对象的映射: 这是一个查询,我想使用所有子字段的匹配来选择几个术语查询,以及一个术语查询: 上述查询不起作用,因为我无法为嵌套对象选择多匹配查询中的所有字
我有一个前端ACF表单-ACF_表单()。使用post对象字段。我想通过自定义字段限制查询结果。下面的代码可以正常工作,除了当我尝试在搜索栏中键入时,会出现以下错误:我得到的错误是ajax响应中的PHP错误; 0:“PhpConsole\Handler”- 1:"strpos()" 2:"acf_order_by_search()" 3:“acf_field_post_object- 4:“acf
问题内容: 我正在尝试通过使用搜索文本框来过滤ng-repeat中的嵌套对象。 给定以下对象: 我想做这样的事情: 这确实是行不通的。我尝试了很多事情,但无法使其正常运行。 我不想更改我的对象。 我进行了很多搜索,但没有找到符合我需要的内容。 问题答案: 我终于有了自己的问题的答案。 我只需要创建自己的过滤器,并使用正则表达式检查对象内部的属性是否具有所需的值即可: 并以这种方式在HTML中应用它
问题内容: 我有一个这样的映射: 我需要按对象的大小进行搜索。我已经试过了: 这是行不通的。给出错误 嵌套:ElasticSearchIllegalArgumentException [在类型为[post]的映射中未找到[提及]的字段]; 我还尝试过用替换脚本部分。这也是错误的 嵌套:ArrayIndexOutOfBoundsException [10]; 如何查询对象大小为2的记录? 问题答案:
我有一个弹性搜索索引集合,如下所示, 现在我需要通过将与其值匹配来搜索文档。(是一些字段,其值存储在中)例如。对于字段,如果它是,则应与上述文档匹配。 我尝试将其映射为嵌套对象,但我无法编写查询来搜索与其相应值匹配的2个或更多的键id。