【发布时间】:2017-03-26 15:24:44
【问题描述】:
我的收藏:
{
title: 'Computers',
maincategories:[
{
title: 'Monitors',
subcategories:[
{
title: '24 inch',
code: 'AFG'
}
]
}
]
}
我想查询代码。代码只是第一部分,所以我想要包含给定搜索的所有子类别。所以AFG101 会返回这个子类别。
我的查询:
module.exports = (req, res) => {
var q = {
'maincategories.subcategories': {
$elemMatch: {
code: 'AFG101'
}
}
};
var query = mongoose.model('TypeCategory').find(q, {'maincategories.$': 1, 'title': 1});
query.exec((err, docs) => {
res.status(200).send(docs);
});
};
我的问题:
如何搜索字符串的一部分?
AFG101应该返回属性为code的所有子类别,其中包含字符串的任何部分。所以在这种情况下,AFG会很受欢迎。与此 sql 问题相同:MySQL: What is a reverse version of LIKE?如何投影子类别。当前查询返回所有子类别。我只想返回那些击中的。
【问题讨论】:
-
我想如果你能在查询Mongo之前将
AFG101解析成对应的代码会更好。 -
@hyades,我不明白。我该怎么做?
-
我想我明白你在第一次提问时想要什么。您想要,例如:拥有多个文档,其中包含“code:AFG1”、“code;AFG2”、“code:AFG3”、“code:ABC1”。因此,当用户(无论)输入类似“AFG”mongo 的内容时将检索您在 CODE 字段中包含“AFG”的所有文档。如果是这样,请检查 mongodb 中的“regex”。docs.mongodb.com/manual/reference/operator/query/regex/…
-
@AlbertoRubio,不,相反。如果用户输入AFG101,并且我的文档中的属性代码有代码:AFG,应该返回这个。
-
嗯......它是一样的,不是吗? $regex 将搜索您键入的字符串并在您的文档中查找该字符串。这不完全是你想要的,但你可以从那里开始。或者,如果您知道所有代码都以 3 个相同的字符开头,请制作并拆分并仅从字符串中获取“AFG”。字符串的前 3 个字符。这就是我所拥有的,对不起。
标签: mongodb mongoose mapreduce aggregation-framework