MongoDB跨不同集合复制文档字段值如何避免生成数组格式?
跨集合字段赋值返回数组问题解决方案
问题原因
$query查询操作符默认会以数组格式返回所有匹配结果的对应字段值,哪怕目标集合X仅存在1条匹配文档,返回结果也会被包裹为长度为1的数组,直接赋值就会导致uid字段为数组类型。
解决方案
使用$first操作符提取查询返回数组的第一个元素即可,注意更新操作需要用聚合管道模式执行(更新操作放在数组内作为管道节点),才能正常使用$first这类聚合操作符,正确语句如下:
[ { $set: { "uid": { $first: { "$query": { "$q": {}, "$ns": "X", "$p": "uid" } } } } } ]
如果你的数据库版本不支持$first操作符,可以使用$arrayElemAt指定提取下标为0的元素,兼容写法如下:
[ { $set: { "uid": { $arrayElemAt: [ { "$query": { "$q": {}, "$ns": "X", "$p": "uid" } }, 0 ] } } } ]
内容的提问来源于stack exchange,提问作者Tal Levi
相关产品推荐
相关产品推荐

