我有一个具有以下结构的集合:
{
"_id":NUUID(...),
"MyArray": [{
"Name": "...",
"MyId": "..."
},
{...}]
},
{...}
我的任务是引入一个新的字段ArrayId,如果MyArray.Name是X,它必须包含MyId中的值,否则不包含任何值(空字符串)。
我尝试了以下方法:
db.getCollection('myCollection').aggregate([
{$addFields: {"ArrayId": {$cond: {if: {$eq: ["$MyArray.Name", "X"]}, then: "$MyArray.MyId", else: ""}}}},
{$out: "myCollection_backup"}
])
但是结果集合对于所有记录具有空的ArrayId。
你能帮忙找到错误吗?在mongo3.4中有更简单的方法吗?
1条答案
按热度按时间6qftjkof1#
也许是这样的:
解释:
在MyArray. Name ="X"的情况下,使用$addFileds/$reduce to $concat将MyArray. MyId转换为新变量SArrayId
(这是在我们预期只有一个MyArray. Name = X的情况下,如果有超过1个MyArray. Name = X,预期会发生什么?)
Playground
以下是仅当发现第一个Name = X时的版本更新(如果有多个Name = X):
Playground2