【发布时间】:2014-02-03 07:18:34
【问题描述】:
我有这个收藏:
Books
[
{
title: Book1,
References: [ObjectId(1), ObjectId(3), ObjectId(5)] <- These are object ids of another collection
Main-Reference: ObjectId(5)
},
{
title: Book2,
References: [ObjectId(2), ObjectId(5), ObjectId(7)]
Main-Reference: ObjectId(5)
}
{
title: Book3,
References: [ObjectId(5), ObjectId(7), ObjectId(9)]
Main-Reference: ObjectId(7)
},
]
我有一个操作,我从图书收藏中删除参考 示例:假设我必须从我的集合中删除 Reference ObjectId(5) 所以我的新收藏变成了这样:
Books
[
{
title: Book1,
References: [ObjectId(1), ObjectId(3)] <- ObjectId(5) is pulled
Main-Reference: ObjectId(1) <- ObjectId(1) is new value as ObjectId(5) is deleted
},
{
title: Book2,
References: [ObjectId(2), ObjectId(7)] <- ObjectId(5) is pulled
Main-Reference: ObjectId(2) <- ObjectId(2) is now main reference
}
{
title: Book3,
References: [ObjectId(7), ObjectId(9)] <- ObjectId(5) is pulled
Main-Reference: ObjectId(7) <- no changes here as ObjectId(7) still exists in References
},
]
目前我是这样做的:
第 1 步:从 References[] 具有 ObjectId(5) 的所有书籍中提取 ObjectId(5)
第 2 步:查询 Books 集合,其中 Main-Reference=ObjectId(5) 并使用 References: {$slice:1} 切片从 References 数组中获取第一个数组元素
第 3 步:更新第 2 步中找到的所有书籍并将 Main-Reference 替换为我从 slice 获得的第一个数组元素
这对我来说似乎很笨拙,并试图看看是否有更好的方法来做到这一点。
【问题讨论】:
标签: mongodb mongodb-.net-driver