我有联系文件,其中包含嵌入式文件" 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})
有什么办法吗?
答案 0 :(得分:2)
如果该查询对您有意义,您可能应该使用不同的数据结构。如果您的嵌入式文档具有id,则它几乎当然应该是第一级公民。
您可以使用聚合框架解决此问题,但我认为这可能会解决您的数据模型更严重的问题。
它也不是很优雅:
>
> db.contacts.aggregate({ $project : {
"appointment_status" : "$lead."appointment_status",
"lead_id" : "$lead.id", ... } });
>
这样,它看起来好像leads
是它自己的集合,但它不是,这只是一个糟糕的黑客攻击。
请注意,没有通配符运算符,因此如果您希望将所有字段都投影到根级别,则必须手动执行此操作。简单地阅读常规文档会更容易 - 如果这不是您需要的,请更正您的架构设计。