【问题标题】:MongoLab db query using REST使用 REST 的 MongoLab 数据库查询
【发布时间】:2014-07-29 06:34:17
【问题描述】:

如果我有很多文档(或数据对象)存储在 MongoLab 数据库中,类似于:

{"_id":{"$oid":"539467f6e4b02221d856bcd8"},
 "Object Type":"Data Object",
 "Object Name":"Human",
 "Subobject Types":
  {"S0":{"User ID":"x"},
   "S1":{"Password":"x"},
   "S2":{"First Name":"x"},
   "S3":{"Middle Name":"x"},
   "S4":{"Last Name":"x"},
   "S5":{"Cover Name":"x"},
   "S6":{"Taxpayer Identification":"x"},
   "S7":{"Email Address":"x"},
   "S8":{"Smartphone Number":"x"},
   "S9":{"Street":"x"},
   "S10":{"City":"x"},
   "S11":{"State":"x"},
   "S12":{"Nation":"x"},
   "S13":{"Postal Code":"x"}
 }
}

如果我使用 REST api 对 MongoLab db 进行以下查询调用...

https://api.mongolab.com/api/1/databases/my-db/collections/my-coll?q={}&apiKey=myAPIKey

其中 q=...

{ "Object Type":"Data Object",
  "Object Name":"Human",
  "Subobject Types":
  {"S0":{"User ID":{}},
   "S1":{"Password":{}},
   "S2":{"First Name":{}},
   "S3":{"Middle Name":{}},
   "S4":{"Last Name":{}},
   "S5":{"Cover Name":{}},
   "S6":{"Taxpayer Identification":{}},
   "S7":{"Email Address":{}},
   "S8":{"Smartphone Number":{}},
   "S9":{"Street":{}},
   "S10":{"City":{}},
   "S11":{"State":{}},
   "S12":{"Nation":{}},
   "S13":{"Postal Code":{}}
  }
}

...那么即使 db 中有许多文档(或上面的数据对象)与上述查询完全匹配,为什么 db 什么也不返回?

如果我使用 $exits 查询运算符 where q=

,它也不会返回任何内容
{"Object Type":"Data Object",
 "Object Name":"Human",
 "Subobject Types":
  {"S0":{"User ID":{"$exists":true}},
   "S1":{"Password":{"$exists":true}},
   "S2":{"First Name":{"$exists":true}},
   "S3":{"Middle Name":{"$exists":true}},
   "S4":{"Last Name":{"$exists":true}},
   "S5":{"Cover Name":{"$exists":true}},
   "S6":{"Taxpayer Identification":{"$exists":true}},
   "S7":{"Email Address":{"$exists":true}},
   "S8":{"Smartphone Number":{"$exists":true}},
   "S9":{"Street":{"$exists":true}},
   "S10":{"City":{"$exists":true}},
   "S11":{"State":{"$exists":true}},
   "S12":{"Nation":{"$exists":true}},
   "S13":{"Postal Code":{"$exists":true}}
  }
}

【问题讨论】:

  • 您能否编辑您的问题以更好地格式化您的 JSON?很难阅读。
  • 试图重新格式化,但输入程序不接受'tabs'、'returns'等来显示重新格式化。
  • 抱歉,在阅读说明后弄清楚如何格式化。

标签: mongodb rest mlab


【解决方案1】:

很高兴帮助您尝试解释您在这 2 个查询中看到的行为。首先,您要求 MongoDB 为每个“Subobject Types.SX.Y”字段查找具有空子文档的文档,但可能没有这样的文档,所有这些文档都是空的嵌入文档。

第二个是对 $exists 操作符的误用。如果您像这样制定查询,您可能会得到您正在寻找的结果:

{
  "Object Type": "Data Object",
  "Object Name": "Human",
  "Subobject Types.S0.User ID": {"$exists": true},
  "Subobject Types.S1.Password": {"$exists": true},
  ...
  "Subobject Types.S13.Postal Code": {"$exists", true}
}

在这种情况下,当引用嵌入文档中的字段时,您需要使用点表示法。如果您提供文字嵌入文档作为查询的一部分,则您要求 MongoDB 查找与所提供的嵌入文档的值完全匹配的值。

希望这会有所帮助。您也可以随时向 support@mongolab.com 发送此类问题的电子邮件,我们很乐意为您提供帮助。

亲切的问候, 肖恩@MongoLab

【讨论】:

  • 那行得通;谢谢,肖恩!我喜欢在 overstack 上发帖,以防其他人有同样的问题;帮助我先在这里复习别人的​​问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2018-10-23
  • 2013-07-11
  • 2013-06-27
  • 1970-01-01
相关资源
最近更新 更多