MongoDB:文档内的查询
我有这样的mongodb文档MongoDB:文档内的查询,mongodb,Mongodb,我有这样的mongodb文档 { "semantics" : [ { "text": "abc gave payment to xyz", "action": "gave" }, { "text": "abc wanted quicker solution", "action
{
"semantics" : [
{
"text": "abc gave payment to xyz",
"action": "gave"
},
{
"text": "abc wanted quicker solution",
"action": "want"
}
],
"keyword" : [
{
"word":"payment",
"imp":0.91
},
{
"word":"solution",
"imp":0.7
}
]
}
要求为那些重要性大于0.9的单词找到动作
值
在上述情况下,支付
的重要性大于0.9,因此应予以考虑<代码>付款存在于其中一个数组中,其中的操作
值为给定
我请求帮助为同样的问题构造mongodb查询 您可以首先使用mapReduce:
db.collection.mapReduce(
function() {
for (var i = 0; i < this.keyword.length; i++) {
if (this.keyword[i].imp >= 0.9) {
emit(this.keyword[i].word, this.semantics)
}
}
},
function(key, values) { },
{
out: {merge: 'result'},
finalize: function(key, semantics) {
var result;
for (var i = 0; i < semantics.length; i++) {
if (semantics[i].text.indexOf(key) != -1) {
result = {key: semantics[i].action};
}
}
return result;
}
)
db.collection.mapReduce(
函数(){
for(var i=0;i=0.9){
emit(this.keyword[i].word,this.semantics)
}
}
},
函数(键,值){},
{
输出:{merge:'result'},
finalize:函数(键、语义){
var结果;
for(var i=0;i
这里我们不关心reduce函数,因为map将返回{word with imp>=0.9:整个语义}
稍后,在将结果存储到result
集合之前,将调用finalize函数,它将遍历与单词相关的所有语义,并获取与包含关键字的文本相关的所有操作
在此之后,您可以
db.result.find()
要查看结果,您将看到一些空结果,因为并非所有键都有匹配的文本和操作,您需要进行一些清理。您可以先使用mapReduce:
db.collection.mapReduce(
function() {
for (var i = 0; i < this.keyword.length; i++) {
if (this.keyword[i].imp >= 0.9) {
emit(this.keyword[i].word, this.semantics)
}
}
},
function(key, values) { },
{
out: {merge: 'result'},
finalize: function(key, semantics) {
var result;
for (var i = 0; i < semantics.length; i++) {
if (semantics[i].text.indexOf(key) != -1) {
result = {key: semantics[i].action};
}
}
return result;
}
)
db.collection.mapReduce(
函数(){
for(var i=0;i=0.9){
emit(this.keyword[i].word,this.semantics)
}
}
},
函数(键,值){},
{
输出:{merge:'result'},
finalize:函数(键、语义){
var结果;
for(var i=0;i
这里我们不关心reduce函数,因为map将返回{word with imp>=0.9:整个语义}
稍后,在将结果存储到result
集合之前,将调用finalize函数,它将遍历与单词相关的所有语义,并获取与包含关键字的文本相关的所有操作
在此之后,您可以
db.result.find()
查看结果,您将看到一些空结果,因为并非所有键都有匹配的文本和操作,您需要清理一点。这提供了整个文档,而不是它的一部分……上述结果将作为{“\u id”:ObjectId(“599e7cacb77f432e4da6069d”),“语义”:[{“action”:“gived”},{“action”:“want”}]}输出应该只有“gived”@srikanth您想要什么结果?输出应该是“gived”…因此,基本上它必须首先筛选imp大于0.9的单词,然后在文本字段中搜索该单词。包含该单词的文本,这是要生成的操作…不知道mapreduce..查询执行时出现错误,因为意外的标记返回我在额外的}….函数()中添加了注释{for(var i=0;i