【发布时间】:2014-09-02 21:23:12
【问题描述】:
我想做一个简单的“聊天”,其中有一个帖子和答案(只有 1 个深度),我决定采用this 方式,所以单个文档看起来像这样
{
_id: ObjectId(...),
posted: date,
author: "name",
content: "content",
comments: [
{ posted: date,
author: "name2"},
content: '...'
}, ... ]
}
我的问题是我应该如何以这种方式搜索内容?我首先需要在“父”内容中查找匹配项,然后是 cmets 列表中的内容。我该怎么做?
【问题讨论】:
-
您能否提供有关搜索用例的更多详细信息?是否要在单个查询中进行搜索?
-
在内容中查找字符串,包括“父”和“子”cmets。如果可以轻松完成单个查询,那就太好了。
-
如果你可以搜索一个正则表达式,你可以使用: {$or : [{'content':{$regex:'your search regex'}}, {'cmets' : { $elemMatch : { 'content':{$regex:'你的搜索正则表达式'}}}]}。这行得通吗?
-
查看docs.mongodb.org/manual/reference/operator/query/elemMatch 了解有关 elemMatch 功能的更多详细信息
-
@BaruchOxman 我尝试了您的查询,但如果找到“子”评论,则结果包含“父”评论。例如,如果我尝试这个: db.messages.find({$or : [{'message':{$regex:'.*Makefile.*'}}, {'cmets' : { $elemMatch: { 'message ':{$regex:'.*Makefile.*'}}}}]}, {'message': 1})并且在“child”消息中找到,结果将只包含“parents”消息
标签: javascript mongodb mapreduce mongodb-query