[英]MongoDB query returning no results
我是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({})
因此,如果您的集合名稱是coll,則它將是:
db.coll.find({"administrators.-HGFsfes.name": /Jos/});
看看這在蒙戈像查詢。
另外,嘗試使用正則表達式模式,如下所示:
db.coll.find({"administrators..-HGFsfes.name": {"$regex":"Jos", "$options":"i"}}});
如果要獲得多個結果,則需要重組數據。
您的錯誤是管理員不是數組,而是具有字段的對象本身就是具有名稱字段的對象。 正確的查詢將是
{ "administrators.-HGFsfes.name": /Jos/}
不幸的是,這種方式只查詢-HGFsfes名稱字段,而不查詢其他管理員名稱字段。
為了實現您想要的,唯一要做的就是用數組替換管理員對象,因此您的文檔將如下所示:
{
"administrators" : [
{
"id" : "-HGFsfes",
"name" : "Jose",
"phone" : 124324
},
{
"id" : "-HGFsfqs",
"name" : "Peter",
"phone" : "+43242342"
}
],
countries : ...
}
這樣您的查詢將起作用。
但是它將返回文檔,其中管理員數組中至少一個條目具有匹配的名稱字段。 要僅返回管理員匹配的元素,而不是整個文檔, 請檢查此問題和我的答案以展開/匹配/組聚合管道。
好的,以為我為您找到了具有聚合框架的更好的解決方案。 在當前集合上運行以下查詢,將返回所有名稱為“ LIKE” jos的管理員(使用i選項不區分大小寫):
db.test1.aggregate(
[
{
$project: {
administrators:{ $objectToArray: "$administrators"}
}
},
{
$unwind: {
path : "$administrators"
}
},
{
$replaceRoot: {
newRoot:"$administrators"
}
},
{
$match: {
"v.name":/jos/i
}
},
]
);
產量
{
"k" : "-HGFsfes",
"v" : {
"name" : "Jose",
"phone" : NumberLong(124324)
}
}
“ k”和“ v”來自“ $ objectToArray”運算符 ,您可以添加$ project階段來重命名它們(如果k值無關緊要,則將其丟棄)
不確定是否要進行Robomongo測試,但是在Studio 3T(以前為Robomongo)中,您可以在Intellishell控制台中復制/粘貼此查詢,也可以在聚合選項卡中復制/導入(小圖標“從剪貼板粘貼”)。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.