我是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可以举个例子吗?
更新
以下是关系数据库中我的数据库的图表:
如何将其转换为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 :(得分: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 : <>,
.....
}
答案 1 :(得分:1)
这个问题需要三个集合:
将保存所有相关数据的订单
当聚会下订单时,我们正在创建文档并在其中放置一些子文档:
Order
数据(ID,日期等)PartyDetails
- 来自party
collection Items
- 包含按方选择的所有项目的数组(详情,数量,费率等)Dispatch
和DispatchDetails
- 这些取决于商品的运送方式这种结构实用程序有效地面向文档的存储,每次你需要检查订单状态时,你只需要一个文档,你就可以一次性获得子文档。
在此类集合中插入数据取决于您将使用的应用程序语言,但我认为这个答案将为您提供文档数据库解决方案的强大功能。
欢迎任何评论!
*编辑*
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)
所以我们的订单看起来像这样:
{
"_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 dump
@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