Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:文档内的查询_Mongodb - Fatal编程技术网

MongoDB:文档内的查询

MongoDB:文档内的查询,mongodb,Mongodb,我有这样的mongodb文档 { "semantics" : [ { "text": "abc gave payment to xyz", "action": "gave" }, { "text": "abc wanted quicker solution", "action

我有这样的mongodb文档

{
"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=0.9){emit(this.keyword[i].word,this.semantics)}},/},函数(键,值){},…已编辑,实际上您可以自己更正。不难注意到错误。它在我的测试期间工作。您可以使用它,因为您拥有所有数据。希望它有帮助这提供了整个文档,而不是其中的一部分…上述结果将导致{“\u id”:ObjectId(“599e7cacb77f432e4da6069d”),“语义”:[{“action”:“gived”},{“action”:“want”}]}输出应该只有“gived”@srikanth您想要什么?结果应该是“gived”“…因此,基本上它必须首先筛选imp大于0.9的单词,然后在文本字段中搜索该单词。包含该单词的文本,即要生成的操作…不知道mapreduce..查询执行时出现错误,因为意外的标记返回我在额外的}….函数()中添加了注释,{for(var i=0;i=0.9){emit(this.keyword[i].word,this.semantics)}},/},函数(键,值){},..编辑,实际上你可以自己更正。不难注意到错误。它在我的测试期间工作。你可以玩它,因为你有所有数据。希望它能帮助我