我提出了以下两个集合的合并,并在mongoimport之后运行一次。在此步骤之后,有一个node.js应用程序(API)仅使用组合的"列表"集合,添加了媒体数组字段。
是否有更清洁的解决方案?
有没有办法使用人口加入他们?架构将如何?
以下用例:
mongoimport -d products -c list --type csv --file list.csv --headerline --drop
mongoimport -d products -c media --type csv --file media.csv --headerline --drop
列表集合的文档字段
{
"_id": ObjectId("22fa69t3cac4567dd05dd134"),
"Type": "Centrifuge",
"Model": "XL-12",
"Price":123000,
"SourceKey": NumberLong(85703549)
… bunch of more fields
}
… up to 1000 documents
媒体收藏的文档字段
{
"_id" : ObjectId("54fa69f1cac4246dd05dd146"),
"MediaURL" : "http://media.random.org/media4/0F84881B-4B4B-4793-B2A2-7CB1237B35A1.jpg",
"ClassSourceKey" : NumberLong(85703549)
},{
"_id" : ObjectId("54fa69f1cac4246dd05dd158"),
"MediaURL" : "http://media.random.org/media4/5D16660E-4FAF-4CC6-9AA5-8DFF5B1EA9EE.jpg",
"ClassSourceKey" : NumberLong(85703549)
},{
"_id" : ObjectId("54fa69f1cac4246dd05dd159"),
"MediaURL" : "http://media.random.org/media12/CD8B1BFB-7807-4520-975B-8F059ABD379B.jpg",
"ClassSourceKey" : NumberLong(85703549)
},
… up to a 100 documents for each product.
SourceKey与ClassSourceKey相关联
list
.find({},
{
DateListingContract: true,
StreetNumber: true,
StreetName: true,
City: true,
State: true,
PostalCode: true,
ListPrice: true,
Type: true,
Model: true,
SquareFootageStructure: true,
SourceKey: true
})
.sort({ListPrice: -1})
.exec(function (err, products) {
if (err) throw err;
async.eachSeries(products, function(item,callback){
media.find({ ClassSourceKey : item.SourceKey }, function(err, images){
if(images.length) {
list.update({_id: item.id}, {Media: images}, function (err) {
if (err) throw err;
});
} else {
list.remove({_id: item.id}, function (err) {
if (err) throw err;
});
}
callback();
}, function(err){
if(err) throw err;
});
});
});