Mongodb 如何更新子文档并使用同一子文档中的值添加新字段?
我正在运行mongo DB版本4.4.5。 我收藏了以下文件:Mongodb 如何更新子文档并使用同一子文档中的值添加新字段?,mongodb,mql,Mongodb,Mql,我正在运行mongo DB版本4.4.5。 我收藏了以下文件: { "_id" : "601a597c9932756822d134cb", "certificate" : { "complete" : true, "validFromTimestamp" : NumberLong("1612126800000"),
{
"_id" : "601a597c9932756822d134cb",
"certificate" : {
"complete" : true,
"validFromTimestamp" : NumberLong("1612126800000"),
"validToTimestamp" : NumberLong("1643576400000")
}
}
我想更新记录,并在证书子文档中添加另一个字段nominatedTimestamp
,该字段的值将与certificate.validFromTimestamp
相同
我尝试了以下MQL查询
db.collection_name.update({
"certificate.validFromTimestamp": {
$exists: true
},
"certificate.nominatedTimestamp": {
$exists: false
}
}, {
$set: {
"certificate.nominatedTimestamp": "$certificate.validFromTimestamp"
}
})
但是,结果(如下所示)是certificate.nominatedTimestamp
是字符串“$certificate.validFromTimestamp”
而不是预期值NumberLong(“1612126800000”)
:
如何让它选择
NumberLong(“1612126800000”)
?您不能在另一个字段中使用内部字段作为值,请尝试使用聚合管道进行更新,只需将更新部分封装在数组括号中,如[{$set:{“certificate.nominatedTimestamp”:“$certificate.validFromTimestamp”}]
Use.@turivishal我已经尝试了你的建议,输出正如我所期望的那样是正确的,但是它只显示,实际上没有保存。我理解聚合的实际工作原理是这样的:它在不实际修改底层数据的情况下输出经过修改的文档db.collection_name.aggregate([{$match:{“certificate.validFromTimestamp”:{$exists:true},“certificate.nominatedTimestamp”:{$exists:false}},{$set:{“certificate.nominatedTimestamp”:“$certicate.validFromTimestamp”}])``您不需要使用聚合函数,只需要在更新查询中进行更改,只需要在更新部分中添加括号,请参见工作您的意思是这样的db.collection_name.update({“certificate.validFromTimestamp”:{$exists:true},“certificate.nominatedTimestamp”:{$exists:false},[{$set:{“certificate.nominatedTimestamp”:“$certificate.validFromTimestamp”})
{
"_id" : "601a597c9932756822d134cb",
"certificate" : {
"complete" : true,
"validFromTimestamp" : NumberLong("1612126800000"),
"validToTimestamp" : NumberLong("1643576400000"),
"nominatedTimestamp" : "$certificate.validFromTimestamp"
}
}