Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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_Robo3t - Fatal编程技术网

MongoDB查询不返回任何结果

MongoDB查询不返回任何结果,mongodb,robo3t,Mongodb,Robo3t,我是mongo的新手,正在尝试在此集合中执行一个非常简单的查询: { "_id" : ObjectId("gdrgrdgrdgdr"), "administrators" : { "-HGFsfes" : { "name" : "Jose", "phone" : NumberLong(124324) }, "-HGFsfqs" : { "name" : "Pet

我是mongo的新手,正在尝试在此集合中执行一个非常简单的查询:

{
    "_id" : ObjectId("gdrgrdgrdgdr"),
    "administrators" : {
        "-HGFsfes" : {
            "name" : "Jose",
            "phone" : NumberLong(124324)
        },
        "-HGFsfqs" : {
            "name" : "Peter",
            "phone" : "+43242342"
        }
    },
    "countries" : {
        "-dgfgrdg : {
            "lang" : "en",
            "name" : "Canada"
        },
        "-grdgrdg" : {
            "lang" : "en",
            "name" : "USA"
        }
    }
}
如何进行查询以返回名为“%Jos%”的管理员的结果

到目前为止我所做的是:
db.getCollection('coll').find({“administrators.name”:/Jos/})

和它的变体。但我尝试的每一件事都没有结果

我做错了什么


提前谢谢

您需要像这样使用查询:

db.collection_name.find({})
db.coll.find({"administrators..-HGFsfes.name": {"$regex":"Jos", "$options":"i"}}});
因此,如果您的集合名称为coll,那么它将是:

db.coll.find({"administrators.-HGFsfes.name": /Jos/});
在mongo中查找类似的查询

此外,请尝试使用以下正则表达式模式:

db.collection_name.find({})
db.coll.find({"administrators..-HGFsfes.name": {"$regex":"Jos", "$options":"i"}}});
它只会给您一个结果,因为您的数据不是屏幕截图中的数组:


如果需要多个结果,则需要重新构造数据。

您的错误在于管理员不是一个数组,而是一个具有字段的对象,而字段本身就是具有名称字段的对象。正确的查询将是

{ "administrators.-HGFsfes.name": /Jos/}
不幸的是,这样您只查询-HGFsfes名称字段,而不是其他管理员名称字段

要实现您想要的功能,唯一要做的就是用数组替换administrators对象,因此您的文档将如下所示:

    { 
    "administrators" : [
        {
            "id" : "-HGFsfes", 
            "name" : "Jose", 
            "phone" : 124324
        }, 
        {
            "id" : "-HGFsfqs", 
            "name" : "Peter", 
            "phone" : "+43242342"
        }
    ], 
 countries : ...
}
这样您的查询就可以工作了


但它将返回administrators数组中至少有一个条目具有匹配名称字段的文档。仅返回管理员匹配元素,而不是整个文档,用于展开/匹配/组聚合管道。

好的,我想我找到了一个更好的解决方案,使用聚合框架。 对当前集合运行以下查询,将返回名为“LIKE”jos(不区分大小写,带i选项)的所有管理员:

输出

{ 
    "k" : "-HGFsfes", 
    "v" : {
        "name" : "Jose", 
        "phone" : NumberLong(124324)
    }
}
“k”和“v”来自,您可以添加一个来重命名它们(如果k值无关紧要,则放弃)

不确定是否要进行Robomongo测试,但在Studio 3T(以前的Robomongo)中,您可以在Intellishell控制台中复制/粘贴此查询,或者在聚合选项卡中复制/导入,(小图标“从剪贴板粘贴”)


希望能有帮助。

你帮了我一点忙,但现在我每次都能得到每一个结果。在您发布的两个查询中,我得到的结果相同。更新后返回的结果与查询结果相同!!请看一看现在由于某些原因我没有得到任何结果查找我在mongoStill中为like查询附加的链接零结果您的查询忽略了要搜索的键的
“-HGFsfes”
部分。你必须包括这一点。所以
.find({“administrators.-HGFsfes.name”:/Jos/})
但是如何搜索“administrators”中的所有对象呢?这很混乱。您可能应该将
administrators
改为数组。这不是我的数据库。我无法更改结构。你的问题是重复的,但我做了你写的查询,返回特定的管理员,robomongo将整个集合返回给我。我看错了吗?哪个问题?在哪个数据架构上?我更改了架构以使管理员成为一个数组,但它似乎不起作用。您可以提供新的架构吗?如果与此相同,则查询db.getCollection('coll').find({“administrators.name”:/Jos/});必须工作此查询是唯一一个看起来实际工作的查询。但我真的不明白。但是谢谢!