2016-06-17 40 views
0

我對noSQL數據庫非常陌生。我已經用noSQL中的mongodb數據庫開始了我的旅程。今天我用了mySQL和MS SQL Server。我知道如何在它們之間創建表格和關係。但是這個noSQL概念完全不同於此。所以,我在問這個問題。我希望我會盡快學習使用noSQL數據庫。如何在已經存在其他集合的情況下插入集合

我已經使用了以下查詢MongoDB中它創建集合並插入數據:

db.createCollection('Parties'); 
db.parties.insert({partyName:"Best Sellers", mobileNo:"9876543214"}); 
db.parties.insert({partyName:"National Traders", mobileNo:"9876543215"}); 
db.createCollection('items'); 
db.items.insert({itemName:"Item-A", size:"12"}); 
db.items.insert({itemName:"Item-B", size:"8"}); 
db.createCollection('orders'); 

視覺上我的訂單將有以下字段:

Order No  : AB/123 
Date of Order: 17-06-2016 
Party Name : National Traders // It will be a select 

Item Name   Quantity  Rate   Amount 
-------------------------------------------------------- 
Item-A //Select  200   20   4000 
Item-B //Select  100   30   3000 
-------------------------------------------------------- 
         300      7000    

我的問題是:

如何爲mongodb插入順序集合進行查詢?我從未使用類似嵌套集合的東西。 anybosy可以舉個例子嗎?

更新:

這是我在關係數據庫數據庫圖表:

enter image description here

我怎樣才能將其轉換到MongoDB的風格?

UPDATE2:

我試圖在Node.js的增加對模型爲了驗證碼:

var mongoose = require('mongoose'); 

var orderSchema = new mongoose.Schema({ 
    salesOrderId: String, 
    orderDate: Date, 
    party: {type: Schema.Types.ObjectId, ref:'Party'}, 
    items:[{{type: Schema.Types.ObjectId, ref:'Item'}, quantity: Number, rate: Number}], 
    dispatches:{ 
    invoiceId: Number, 
    dispatchDate: Date, 
    items: [{{type: Schema.Types.ObjectId, ref:'Item'}, quantity: Number, rate: Number}] 
    } 
}); 

mongoose.model('Order', orderSchema); 
+0

什麼關係雙方項階 - 你能解釋一下嗎? – profesor79

+0

@ profesor79請看看最新的問題。 – Vishal

+0

今晚會做。架構看起來很完美! – profesor79

回答

1

這個問題需要三個類別:

  1. 項目 - 將舉行項目數據
  2. 黨 - 將舉行三方數據
  3. 訂單將持有的所有相關數據

    image

下訂單時由當事人放置,以便收集在我們創建的文檔,並在其中放置一些子文檔:

  1. Order數據(ID,日期等)
  2. PartyDetails - 從party整個文檔收集
  3. Items - 包含由黨的細節(數量,費率等)
  4. DispatchDispatchDetails選擇了所有項目的數組 - 那些依賴的項目是如何運

此結構實用程序高效地面向文檔的存儲,每次您需要檢查訂單狀態時,只需要索取一個文檔,您就可以一次獲取子文檔。

在這樣的集合中插入數據將取決於您將使用的應用程序語言,但我認爲這個答案將爲您提供文檔數據庫解決方案的強大功能。

歡迎任何評論!

*編輯*

var itemToInsertA = db.items.find({"itemName" : "Item-A"}).toArray() 
var itemToInsertB = db.items.find({"itemName" : "Item-B"}).toArray() 
var party = db.parties.find({"partyName" : "National Traders"}).toArray() 

var order = { 
    //_id - will be assigned by db - but we can do it mannually 
    orderDate : new Date(), // now 
    salesOrderId : "Need to provide this from sale now or later", 
    PartyDetails : party[0], 
    Items : [{ 
      item : itemToInsertA[0], 
      Quantity : 200, 
      Rate : 20, 
      ValueAtTransactionDate : 4000 
     }, { 
      item : itemToInsertB[0], 
      Quantity : 100, 
      Rate : 30, 
      ValueAtTransactionDate : 3000 
     } 
    ] 
} 

db.orders.insertOne(order) 

所以finnaly我們的訂單是這樣的:

{ 
    "_id" : ObjectId("5767d030ecf8248c30af068c"), 
    "orderDate" : ISODate("2016-06-20T11:14:56.372Z"), 
    "salesOrderId" : "Need to provide this from sale now or later", 
    "PartyDetails" : { 
     "_id" : ObjectId("5767ce26ecf8248c30af0686"), 
     "partyName" : "National Traders", 
     "mobileNo" : "9876543215" 
    }, 
    "Items" : [ 
     { 
      "item" : { 
       "_id" : ObjectId("5767ce26ecf8248c30af0687"), 
       "itemName" : "Item-A", 
       "size" : "12" 
      }, 
      "Quantity" : 200.0, 
      "Rate" : 20.0, 
      "ValueAtTransactionDate" : 4000.0 
     }, 
     { 
      "item" : { 
       "_id" : ObjectId("5767ce26ecf8248c30af0688"), 
       "itemName" : "Item-B", 
       "size" : "8" 
      }, 
      "Quantity" : 100.0, 
      "Rate" : 30.0, 
      "ValueAtTransactionDate" : 3000.0 
     } 
    ] 
} 

創建我用plantUML與QEditor圖。

plantumpl傾倒

@startuml 

package "Party"{ 
[PartyId] 
[PartyCode] 
[PartyName] 
[MobileNumber] 
} 

package "Item"{ 
[ItemId] 
[ItemCode] 
[ItemName] 
} 

package "Order"{ 
[OrderId] 
[SalesOrderId] 
[OrderDate] 



node "Dispatch"{ 
[InvoiceId] 
[SalesInvoiceId] 
[DateOfDispatch] 

} 

node "DispatchItemTransaction"{ 
[DispatchItemTId] 
[Quantity.] 
[Rate.] 
[ItemId.] 
[InvoiceId.] 
} 

component PartyDetails 
node "Items"{ 
component ItemDetails 
[Quantity] 
[Rate] 
[Value] 
} 


} 


Item -> ItemDetails 
ItemDetails-->ItemId. 
Party -down-> PartyDetails 
@enduml 
+0

Greate Answer !!!!!!謝謝@ profesor79。這是一個完美的答案。仍然我不明白如何查詢插入Order集合中的對象。你能給我一個關於訂單收集插入查詢的例子嗎? – Vishal

+0

@Vishal添加了一些控制檯代碼來插入訂購集合 – profesor79

+0

謝謝。這很好。 – Vishal

1

的MongoDB不遵循關係數據庫的數據結構。 將SQL數據結構複製到MongoDB不是使用MongoDB的理想方式。您的應用程序應該修改爲使用MongoDB風格的數據結構。

對於存儲訂單數據,我建議只使用一個具有整個訂單數據的集合。

{ 
    orderNumber : 7283, 
    party : {partyName:"Best Sellers", mobileNo:"9876543214"}, 
    items : [ 
     {itemName:"Item-A", size:"12"}, 
     {itemName:"Item-B", size:"8"}, 
     ..... 
    ] 
    orderDate : <>, 
    total : <>, 
    status : <>, 
    ..... 
} 
+0

你能否檢查我的更新部分? – Vishal

相關問題