在额外的MongoDB字段中保存数组长度
根据答案,我试图找出数组的大小并将其保存在额外字段中 我有一个集合在额外的MongoDB字段中保存数组长度,mongodb,mongodb-query,Mongodb,Mongodb Query,根据答案,我试图找出数组的大小并将其保存在额外字段中 我有一个集合user\u details,文档结构如下: { user_id : 1, likes : [1,2,3,4], likes_count : 0 } 我使用的查询如下所示: db.user_details.update({user_id : 1},{$set:{ likes_count : this.likes.length }}) 但是,它抛出了一个错误 "message" : "Cannot rea
user\u details
,文档结构如下:
{
user_id : 1,
likes : [1,2,3,4],
likes_count : 0
}
我使用的查询如下所示:
db.user_details.update({user_id : 1},{$set:{ likes_count : this.likes.length }})
但是,它抛出了一个错误
"message" : "Cannot read property 'length' of undefined"
如何在额外字段中保存数组的长度
附:我正在使用MongoDB 3.4
将返回的likes\u计数
存储在变量
中,并通过提供likes\u计数
变量执行更新
像这样的
Model.aggregate(
[
{
$project: {
likes_count: { $size: "$test" }
}
}
], (err, re) => {
console.log(err, re);
var likes_count = re[0].likes_count;
Model.update({email: 1}, {$set: {likes_count: likes_count}}, (err, d) => {
console.log(err, d);
})
}
)
使用MongoDB 3.4及更新版本,您可以使用管道添加所需字段(阶段相当于一个阶段,该阶段明确指定输入文档中的所有现有字段并添加新字段)然后使用运算符将聚合操作的结果写入同一集合,从而有效地更新基础集合 如果由操作指定的集合已经存在,则在聚合完成后,阶段将用新的结果集合自动替换现有集合 要获取计数,请使用返回数组字段长度的运算符请记住,所有文档都必须有
likes
字段。
总体而言,您需要运行以下管道以实现所需的更新操作:
db.user_details.aggregate([
{ "$addFields": { "likes_count": { "$size": "$likes" } } },
{ "$out": "user_details" }
])
值得一提的是它的副本。
db.user_details.aggregate([
{ "$addFields": { "likes_count": { "$size": "$likes" } } },
{ "$out": "user_details" }
])