1
感謝您的閱讀。我試圖獲取我存儲在mongodb數據庫中的大量數據,以便在NodeJS中使用mongoose模塊顯示在前端。我想知道解決這個問題的最好方法是什麼?我的數據是這樣的......MongoDB/Node:將集合中的文檔的一部分插入另一個集合中的文檔
收藏1:洞穴
{
"_id" : ObjectId("564d2f6eb0896138247ff791"),
"name" : "ACME Cave",
"slug" : "acme-cave",
"timeCreated" : ISODate("2015-11-19T02:09:50.492+0000"),
"address" : {
"county" : "Somewhere",
"state" : "CA",
"country" : "USA"
}
}
系列2:位置
{
"_id" : ObjectId("564d2f6fb0896138247ff855"),
"latitude" : 54.5793621,
"longitude" : -74.9669167,
"parent_id" : ObjectId("564d2f6eb0896138247ff791"), <-- matches collection 1
"timeCreated" : ISODate("2015-11-19T02:09:51.413+0000"),
}
{
"_id" : ObjectId("564d2f6fb0896138247ff855"),
"latitude" : 48.5783611,
"longitude" : -72.9669167,
"parent_id" : ObjectId("564d2f6eb0896138247ff791"), <-- matches collection 1
"timeCreated" : ISODate("2015-11-19T02:09:51.413+0000"),
}
我想合併一些兒童領域到像這樣的家長。 ..
{
"_id" : ObjectId("564d2f6eb0896138247ff791"),
"name" : "ACME Cave",
"slug" : "acme-cave",
"timeCreated" : ISODate("2015-11-19T02:09:50.492+0000"),
"address" : {
"county" : "Somewhere",
"state" : "NY",
"country" : "USA"
},
locations: [
{
"_id" : ObjectId("564d2f6fb0896138247ff855"),
"latitude" : 54.5793621,
"longitude" : -74.9669167,
"parent_id" : ObjectId("564d2f6eb0896138247ff791"), <-- matches doc collection 1
"timeCreated" : ISODate("2015-11-19T02:09:51.413+0000"),
},
{
"_id" : ObjectId("564d2f6fb0896138247ff855"),
"latitude" : 48.5783611,
"longitude" : -72.9669167,
"parent_id" : ObjectId("564d2f6eb0896138247ff791"), <-- matches doc collection 1
"timeCreated" : ISODate("2015-11-19T02:09:51.413+0000"),
}
]
}
我有下面的代碼片段完成此操作,但它看起來不正確。有沒有人有任何洞察這樣做的權利?
Parent.find({}, {'locations': 1}).stream().on('data', function(parent) {
// add the location to the parent doc
Child.find({parent_id: {$in: parent._id}}, {'latitude': 1, 'longitude': 1}, function(err, child) {
parent.locations = child;
console.log(parent);
});
});
這將返回follwing JSON,這是我的輸出相同..
{
"_id" : ObjectId("564d2f6eb0896138247ff791"),
"name" : "ACME Cave",
"slug" : "acme-cave",
"timeCreated" : ISODate("2015-11-19T02:09:50.492+0000"),
"address" : {
"county" : "Somewhere",
"state" : "NY",
"country" : "USA"
},
locations: [
{
"_id" : ObjectId("564d2f6fb0896138247ff855"),
"latitude" : 54.5793621,
"longitude" : -74.9669167,
"parent_id" : ObjectId("564d2f6eb0896138247ff791"), <-- matches doc collection 1
"timeCreated" : ISODate("2015-11-19T02:09:51.413+0000"),
},
{
"_id" : ObjectId("564d2f6fb0896138247ff855"),
"latitude" : 48.5783611,
"longitude" : -72.9669167,
"parent_id" : ObjectId("564d2f6eb0896138247ff791"), <-- matches doc collection 1
"timeCreated" : ISODate("2015-11-19T02:09:51.413+0000"),
}
]
}
我曾想過這些模式捲起成1個集,但我不能因爲其他功能我將會添加到代碼中,比如存儲圖片和每個孩子的編輯。我不認爲使用單個集合是明智的,因爲我將在文檔中存儲太多信息。
感謝您的幫助!
這不是一個壞主意!我一直在思考這個問題,但我一直在想,如果我有一個隨機的位置文件,並且我需要獲得父項?我想可以保存parent_id。我認爲這是一個不好的方法,或者在每個集合中都存儲這兩種情況很常見?我來自強大的關係數據庫背景,讓我的頭腦變得粗糙。 – devinception
在MongoDB中,針對您的問題有不同的解決方案。我推薦以下系列文章:[6 MongoDB Schema Design的經驗法則](http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part -1)。 – hecnabae
感謝您的幫助,我決定遵循您的示例並將ObjectIds存儲在洞穴文檔中。 – devinception