获取集合中的所有嵌入文档

时间:2015-03-07 20:27:24

标签: mongodb

我有联系文件,其中包含嵌入式文件" lead"。所以数据看起来像这样:

{ 
    "_id" : ObjectId("54f8fa496d6163ad64010000"),
    "name" : "teretyrrtuyytiuyi",
    "email" : "rertytruyy@fdgjioj.com", 
    "fax" : "",
    "birth_date" : null, 
    "phone" : "dfgdfhfgjg",
    "phone_2" :
    "hgjhkhjkljlj",
    "lead" : { "_id" : ObjectId("54f8fa496d6163ad64020000"), "appointment status" : "dfhgfgjghjk" }
}

当有很多联系人时,会有很多线索。我想要检索集合中的所有潜在客户,而无需检索拥有的联系人。我尝试了以下但似乎没有工作:

db.lead.find()
db.contacts.find({ 'lead.$' : 1})

有什么办法吗?

1 个答案:

答案 0 :(得分:2)

如果该查询对您有意义,您可能应该使用不同的数据结构。如果您的嵌入式文档具有id,则它几乎当然应该是第一级公民。

您可以使用聚合框架解决此问题,但我认为这可能会解决您的数据模型更严重的问题。

它也不是很优雅:

>
> db.contacts.aggregate({ $project : { 
      "appointment_status" : "$lead."appointment_status", 
      "lead_id" : "$lead.id", ... } });
>

这样,它看起来好像leads是它自己的集合,但它不是,这只是一个糟糕的黑客攻击。

请注意,没有通配符运算符,因此如果您希望将所有字段都投影到根级别,则必须手动执行此操作。简单地阅读常规文档会更容易 - 如果这不是您需要的,请更正您的架构设计。