Node.js MongoDB在插入对象属性之前检查对象属性,否则创建新对象
我使用MongoDB,我有一个简单的文档结构:Node.js MongoDB在插入对象属性之前检查对象属性,否则创建新对象,node.js,json,mongodb,mongoose,Node.js,Json,Mongodb,Mongoose,我使用MongoDB,我有一个简单的文档结构: name: String data: Array 0: Object lastUpdated: Number values: Array 我的目标是将新内容插入到我的值数组中,但在“lastUpdated”更改后,数据中应该有一个新对象,具有新的“lastUpdated”和“values”属性,然后将其插入 因此,我的查询一直插入到“data”的第一个元素中,直到“lastUpdated”属性发生更改。然后在“数据”数组中创建
name: String
data: Array
0: Object
lastUpdated: Number
values: Array
我的目标是将新内容插入到我的值数组中,但在“lastUpdated”更改后,数据中应该有一个新对象,具有新的“lastUpdated”和“values”属性,然后将其插入
因此,我的查询一直插入到“data”的第一个元素中,直到“lastUpdated”属性发生更改。然后在“数据”数组中创建一个新元素,并插入该值数组
我已尝试使用findOneAndUpdate()(“my_obj”包含更新时可能具有不同内容的查询数据)
过滤器:{name:my_obj.name}
//成功找到文档
更新:{data:{lastUpdated:my_obj.lastUpdated,$addToSet:{values:my_obj.uuid}}
选项:{upsert:true,new:true}
这个查询是我能找到的最接近的查询,但我收到一个错误“MongoError:data.0中以美元($)为前缀的字段“$addToSet”。$addToSet”对存储无效”,这完全有道理,但我似乎不知道如何使它工作
如果它起作用会是什么样子的示例:
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple"]
}
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
}
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
},
{
lastUpdated: 890,
values: ["bannana", "kiwi"]
}
]
我的当前文档:
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple"]
}
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
}
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
},
{
lastUpdated: 890,
values: ["bannana", "kiwi"]
}
]
让我们插入两个最新更新值为567的水果:
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple"]
}
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
}
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
},
{
lastUpdated: 890,
values: ["bannana", "kiwi"]
}
]
这就是我们的文档现在的样子:
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple"]
}
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
}
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
},
{
lastUpdated: 890,
values: ["bannana", "kiwi"]
}
]
接下来,我们插入相同的两个水果,但最后更新的值不同:
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple"]
}
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
}
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
},
{
lastUpdated: 890,
values: ["bannana", "kiwi"]
}
]
结果是创建一个新对象(使用新的lastUpdated值),其中包含水果:
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple"]
}
]
{ lastUpdated: 567, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
}
]
{ lastUpdated: 890, values: ["bannana", "kiwi"] }
name: "fruit",
data:[
{
lastUpdated: 567,
values: ["orange", "apple", "bannana", "kiwi"]
},
{
lastUpdated: 890,
values: ["bannana", "kiwi"]
}
]
我可以用一个简单的查询来完成吗?还是集合?或者我需要使用自定义代码来迭代数据元素吗