如果我有一个类似
的收藏集(例如,人物){
_id: ObjectID("5e12f6260c190f8ee91b162d"),
name: "Joe Bookreader",
address: "Highway To Hell 21"
}
我想删除此地址值,然后将集合(地址)嵌入其中:
{
_id: ObjectID("5e25fg3gjh48ee91b2653"),
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
外观如下:
{
_id: ObjectID("5e12f6260c190f8ee91b162d"),
name: "Joe Bookreader",
address: [
{
street: "123 Fake Street",
city: "Faketon",
state: "MA",
zip: "12345"
}
]
}
我该怎么做?
会像插入下面的代码一样(或完全不同)插入新列吗?
var bulkInsert = db.people.initializeUnorderedBulkOp()
db.addresses.find().forEach(
function(doc){
bulkInsert.insert(doc);
}
)
任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
您可以运行$lookup with empty pipeline
将一个(整个集合)嵌入另一个。
db.people.aggregate([
{
$lookup: {
from: "addresses",
pipeline: [ ],
as: "addresses"
}
}
])
然后,您可以使用$out(将输出集合完全替换为聚合结果)或$merge(将聚合结果合并到现有集合中):
编辑:
您可以将$match
添加到单个文档而不是整个文档集中:
db.people.aggregate([
{
$lookup: {
from: "addresses",
pipeline: [ { $match: { street: "123 Fake Street" } } ],
as: "addresses"
}
}
])