gpt4 book ai didi

node.js - MongoDB - 在 node.js 中使用多个 $elemMatch 运算符更新多个级别的子文档

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:14 27 4
gpt4 key购买 nike

我对 MongoDB 很陌生,所以请怜悯我!我有一个如下所示的架构:

{
"hour": 0,
"minutes": [
{
"minute": 0,
"minuteVolume": 0,
"seconds": [
{
"second": 0,
"secondVolume": 0
},
{
"second": 1,
"secondVolume": 0
}
},
{
"minute": 22,
"minuteVolume": 0,
"seconds": [
{
"second": 0,
"secondVolume": 0
},
{
"second": 1,
"secondVolume": 0
}
}],
"hourVolume": 0
}

我正在尝试更新特定的“secondVolume”“一分钟卷”。我尝试过以下方法:

collection.update({"hour": hour, 
"minutes": {$elemMatch: {"minute": minute}},
"minutes.seconds": {$elemMatch: {"second": second}}},
{ $inc: {hourVolume: 1, "minutes.$.minuteVolume": 1, "minutes.$.minuteVolume.seconds.$.second": 1}
},
{upsert:false,safe:true},
function(err,data){
if (err){
console.log(err);
}
else
{
console.log(data);
}
}
);
  • 但我显然做错了什么。如果我删除 "second"$elemMatch 并仅尝试更新 "minuteVolume",它就可以正常工作。这让我相信我在位置运算符上做错了什么,或者我的查询没有正确展开文档。

这甚至可以通过 MongoDB 中的单个查询实现吗?我使用的是 mongodb 驱动程序版本 1.4.19。

提前非常感谢!

最佳答案

看来你可以我以及为该功能投票的 240 人。 https://jira.mongodb.org/browse/SERVER-831

如果您知道元素的位置(可能通过首先查询文档),您可以使用位置运算符而不是使用 $elemMatch 进行更新。

{ $inc: {hourVolume: 1, "minutes.0.minuteVolume": 1, "minutes.0.minuteVolume.seconds.2.second": 1 }

我必须重做多个架构以防止多重嵌套,从而允许一次性更新。

关于node.js - MongoDB - 在 node.js 中使用多个 $elemMatch 运算符更新多个级别的子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26850030/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com