Mongodb 使用聚合遍历集合
Mongodb use aggregate to iterate through collection
我有一个名为 collectionname 的摘要集和一个名为 keywords 的关键字列表。
我使用下面的代码过滤掉 collectionname 中包含列表中第一个关键字的所有摘要,效果很好。
db.collectioname.aggregate([ { $match: { summary: {$regex: keywords[1], $options:"i"} } }, { $out: "subsetfinal" } ]);
但是当我开始循环它时,它给了我聚合错误。我真的想不通为什么。
for (var i = 0; i < 79; i++) {db.collectioname.aggregate([ { $match: { summary: {$regex: keywords[i], $options:"i"} } }, { $out: "subsetfinal" } ])};
它给我错误:
$regex 必须是字符串
代码 16810
有人能帮忙吗?
尝试使用 forEach:
keywords.forEach(function(keyword)
{
db.collectioname.aggregate([ { $match: { summary: {$regex: keyword, $options:"i"} } }, { $out: "subsetfinal" } ])
});
您可以使用管道分隔的正则表达式模式和如下关键字:
测试文档:
db.collectioname.insert([
{ summary: "a b c" },
{ summary: "d e f" },
{ summary: "g h i" },
{ summary: "j k l" },
{ summary: "m n o" }
]);
魔法:
var keywords = ["a", "d", "j"],
regex = keywords.join("|");
db.collectioname.aggregate([
{
"$match": {
"summary": {
"$regex": regex,
"$options": "i"
}
}
},
{ "$out": "subsetfinal" }
]);
查询:
db.subsetfinal.find({}, {_id:0})
给予
/* 0 */
{
"summary" : "a b c"
}
/* 1 */
{
"summary" : "d e f"
}
/* 2 */
{
"summary" : "j k l"
}
我有一个名为 collectionname 的摘要集和一个名为 keywords 的关键字列表。 我使用下面的代码过滤掉 collectionname 中包含列表中第一个关键字的所有摘要,效果很好。
db.collectioname.aggregate([ { $match: { summary: {$regex: keywords[1], $options:"i"} } }, { $out: "subsetfinal" } ]);
但是当我开始循环它时,它给了我聚合错误。我真的想不通为什么。
for (var i = 0; i < 79; i++) {db.collectioname.aggregate([ { $match: { summary: {$regex: keywords[i], $options:"i"} } }, { $out: "subsetfinal" } ])};
它给我错误:
$regex 必须是字符串
代码 16810
有人能帮忙吗?
尝试使用 forEach:
keywords.forEach(function(keyword)
{
db.collectioname.aggregate([ { $match: { summary: {$regex: keyword, $options:"i"} } }, { $out: "subsetfinal" } ])
});
您可以使用管道分隔的正则表达式模式和如下关键字:
测试文档:
db.collectioname.insert([
{ summary: "a b c" },
{ summary: "d e f" },
{ summary: "g h i" },
{ summary: "j k l" },
{ summary: "m n o" }
]);
魔法:
var keywords = ["a", "d", "j"],
regex = keywords.join("|");
db.collectioname.aggregate([
{
"$match": {
"summary": {
"$regex": regex,
"$options": "i"
}
}
},
{ "$out": "subsetfinal" }
]);
查询:
db.subsetfinal.find({}, {_id:0})
给予
/* 0 */
{
"summary" : "a b c"
}
/* 1 */
{
"summary" : "d e f"
}
/* 2 */
{
"summary" : "j k l"
}