couchdb java 连接_MongoDB / CouchDB:将表连接到自身

在MongoDB中,你可以这样做 . 我使用交互式JavaScript Shell .

首先创建一些用户:

> db.so.employee.insert({name: "Joe"})

> db.so.employee.insert({name: "Moe"})

> db.so.employee.insert({name: "Bart"})

> db.so.employee.insert({name: "Homer"})

> db.so.employee.find()

{ "_id" : ObjectId("4de35ccbcc0379536e1ac43b"), "name" : "Joe" }

{ "_id" : ObjectId("4de35ccfcc0379536e1ac43c"), "name" : "Moe" }

{ "_id" : ObjectId("4de35cd3cc0379536e1ac43d"), "name" : "Bart" }

{ "_id" : ObjectId("4de35cd7cc0379536e1ac43e"), "name" : "Homer" }

现在创建一些项目

> db.so.project.insert({name: "Web App A"})

> db.so.project.insert({name: "Web App B"})

> db.so.project.insert({name: "Web App C"})

> db.so.project.find();

{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "name" : "Web App A" }

{ "_id" : ObjectId("4de35d13cc0379536e1ac440"), "name" : "Web App B" }

{ "_id" : ObjectId("4de35d15cc0379536e1ac441"), "name" : "Web App C" }

将用户添加到项目中

> db.so.project.update({name: "Web App A"}, {$push: {employees: ObjectId('4de35ccbcc0379536e1ac43b') }})

> db.so.project.update({name: "Web App A"}, {$push: {employees: ObjectId('4de35ccfcc0379536e1ac43c') }})

> db.so.project.update({name: "Web App B"}, {$push: {employees: ObjectId('4de35ccfcc0379536e1ac43c') }})

> db.so.project.update({name: "Web App C"}, {$push: {employees: ObjectId('4de35ccfcc0379536e1ac43c') }})

> db.so.project.update({name: "Web App B"}, {$push: {employees: ObjectId('4de35cd3cc0379536e1ac43d') }})

> db.so.project.update({name: "Web App C"}, {$push: {employees: ObjectId('4de35cd3cc0379536e1ac43d') }})

> db.so.project.update({name: "Web App B"}, {$push: {employees: ObjectId('4de35cd7cc0379536e1ac43e') }})

> db.so.project.find()

{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "employees" : [

ObjectId("4de35ccbcc0379536e1ac43b"),

ObjectId("4de35ccfcc0379536e1ac43c")

], "name" : "Web App A" }

{ "_id" : ObjectId("4de35d15cc0379536e1ac441"), "employees" : [

ObjectId("4de35ccfcc0379536e1ac43c"),

ObjectId("4de35cd3cc0379536e1ac43d")

], "name" : "Web App C" }

{ "_id" : ObjectId("4de35d13cc0379536e1ac440"), "employees" : [

ObjectId("4de35cd3cc0379536e1ac43d"),

ObjectId("4de35cd7cc0379536e1ac43e")

], "name" : "Web App B" }

如果你现在想要找到所有项目“Joe”

> db.so.project.find({employees: ObjectId('4de35ccbcc0379536e1ac43b') }, {name: 1})

{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "name" : "Web App A" }

找到Joe OR Moe工作的所有项目

> db.so.project.find({employees: {$in: [ObjectId('4de35ccbcc0379536e1ac43b'), ObjectId('4de35ccfcc0379536e1ac43c')] }}, {name: 1})

{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "name" : "Web App A" }

{ "_id" : ObjectId("4de35d15cc0379536e1ac441"), "name" : "Web App C" }

{ "_id" : ObjectId("4de35d13cc0379536e1ac440"), "name" : "Web App B" }

找到Joe AND moe工作的所有项目

> db.so.project.find({employees: {$all: [ObjectId('4de35ccbcc0379536e1ac43b'), ObjectId('4de35ccfcc0379536e1ac43c')] }}, {name: 1})

{ "_id" : ObjectId("4de35d0fcc0379536e1ac43f"), "name" : "Web App A" }

要获得特定项目的所有雇员,您需要两个查询 . 从项目C中寻找所有员工 .

> db.so.project.find({name: "Web App C"}, {employees: 1})

{ "_id" : ObjectId("4de35d15cc0379536e1ac441"), "employees" : [

ObjectId("4de35ccfcc0379536e1ac43c"),

ObjectId("4de35cd3cc0379536e1ac43d")

] }

在您的应用程序中,您可以根据返回值构建新查询并构建此查询:

> db.so.employee.find({_id: {$in: [ObjectId('4de35ccfcc0379536e1ac43c'), ObjectId('4de35cd3cc0379536e1ac43d')] }})

{ "_id" : ObjectId("4de35ccfcc0379536e1ac43c"), "name" : "Moe" }

{ "_id" : ObjectId("4de35cd3cc0379536e1ac43d"), "name" : "Bart" }

我希望这有助于理解MongoDB如何工作以及如何 Build 关系 . 我在这里使用手动解除引用 . 这意味着我直接保存ObjectID并手动获取它 . 还存在“DBRef”,然后您的驱动程序会为您获取它 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值