2015-06-29 34 views
1

我有兩個不同的類別:我如何從兩個不同的採集數據在MongoDB中

userimage:中

> db.userimage.find() 
{ "_id" : ObjectId("5590e67ee06eeab5ff79cdbf"), "transactionid" : 200, "age" : 30 } 
{ "_id" : ObjectId("5590e730e06eeab5ff79cdc0"), "transactionid" : 100, "age" : 28 } 
{ "_id" : ObjectId("5590e737e06eeab5ff79cdc1"), "transactionid" : 300, "age" : 29 } 
{ "_id" : ObjectId("5590e741e06eeab5ff79cdc2"), "transactionid" : 400, "age" : 32 } 

usertest

> db.usertest.find() 
{ "_id" : 100, "name" : "A" } 
{ "_id" : 200, "name" : "B" } 
{ "_id" : 300, "name" : "C" } 
{ "_id" : 400, "name" : "D" } 

這裏的transactionId userimage是相對於usertest收集_id ..我怎樣才能參考這兩個集合.. 是否有設計這兩個集合的任何更好的辦法...
我不想在一個集合,以保持兩個集合,由於某種原因..

我想要做的使用Java代碼是:

下面是什麼,我試圖做::

MongoClient mongoClient = new MongoClient("localhost" , 27017); 
     DB db = mongoClient.getDB("ITAU"); 
     userimage = db.getCollection("userimage"); 
     usertest = db.getCollection("usertest"); 
     BasicDBObject post = new BasicDBObject("transactionid", 200); 
     DBCursor myCur = userimage.find(post); 
     while(myCur.hasNext()) { 
      System.out.println(myCur.next()); 

     } 

我怎樣才能既收集數據...

+3

爲什麼你不應該加上''usertest'在'userimage'收集name'場? – Yogesh

+0

不。有一個原因,我會保留一些圖像文件..所以我想保持獨立.. – Aman

+0

您可以使用Python和pymongo之類的腳本語言,並創建兩個獨特的連接並同時遍歷它們。 – jwillis0720

回答

1

usertest收集不需要name場再加入namein userimage collection so userimage`集合看起來是這樣的:

{ "_id" : ObjectId("5590e67ee06eeab5ff79cdbf"), "transactionid" : 200, "age" : 30 ,"name":"B" } 
{ "_id" : ObjectId("5590e730e06eeab5ff79cdc0"), "transactionid" : 100, "age" : 28 ,"name":"A" } 
{ "_id" : ObjectId("5590e737e06eeab5ff79cdc1"), "transactionid" : 300, "age" : 29 ,"name":"C" } 
{ "_id" : ObjectId("5590e741e06eeab5ff79cdc2"), "transactionid" : 400, "age" : 32 ,"name":"D" } 

然後用你的代碼:

MongoClient mongoClient = new MongoClient("localhost" , 27017); 
    DB db = mongoClient.getDB("ITAU"); 
    userimage = db.getCollection("userimage"); 
    usertest = db.getCollection("usertest"); 
    BasicDBObject post = new BasicDBObject("transactionid", 200); 
    DBCursor myCur = userimage.find(post); 
    while(myCur.hasNext()) { 
     System.out.println(myCur.next()); 
    } 

它返回整個匹配的文檔給定的條件。如果是無法移動name提交的userimage集合,那麼你應該做兩個獨立的,同時這樣的循環:

MongoClient mongoClient = new MongoClient("localhost" , 27017); 
    DB db = mongoClient.getDB("ITAU"); 
    userimage = db.getCollection("userimage"); 
    usertest = db.getCollection("usertest"); 
    BasicDBObject post = new BasicDBObject("transactionid", 200); 
    BasicDBObject _idPost = new BasicDBObject("_id", 200); // because _id = transactionid 
    DBCursor myCur = userimage.find(post); 
    DBCursor myCur1 = usertest.find(_idPost); 
    while(myCur.hasNext()) { 
     System.out.println(myCur.next()); 
    } 
    while(myCur1.hasNext()) { 
     System.out.println(myCur1.next()); 
    } 
2

您正在使用的NoSQL數據庫不RDBMS。 MongoDB不支持連接。所以,這是更好,如果你可以合併集合和改變你的模式,如:

userimage集合:

{ "_id" : ObjectId("5590e67ee06eeab5ff79cdbf"), "transactionid" : 200, "age" : 30 } 

usertest集合:

{ "_id" : 200, "name" : "B" } 

最好能使用 -

user集合:

{ "_id" : ObjectId("5590e67ee06eeab5ff79cdbf"), "transactionid" : 200, "age" : 30, "name" : "B" } 

在這裏,我假設一對一的關係。如果有一對多的話,你可以保留一個清單。

欲瞭解更多詳情,請參閱refer

+0

不。有一個原因,我會保留一些圖像文件..所以我想保持獨立。 – Aman

+0

如果圖像文件的大小較大,那麼您也可以查看[GridFS](http://docs.mongodb.org/manual/core/gridfs/)。 –

相關問題