Database MongoDB$push-in数组的数组错误:速记属性';元素';
我希望将数据添加到元素中,但出现错误。如何解决mongodb/typescript问题 尝试1错误:速记属性“elements”的作用域中不存在值。声明一个或提供一个初始值设定项。ts(18004) 尝试1Database MongoDB$push-in数组的数组错误:速记属性';元素';,database,mongodb,typescript,mongodb-query,push,Database,Mongodb,Typescript,Mongodb Query,Push,我希望将数据添加到元素中,但出现错误。如何解决mongodb/typescript问题 尝试1错误:速记属性“elements”的作用域中不存在值。声明一个或提供一个初始值设定项。ts(18004) 尝试1 async add<T extends { id: string; parentID: string, elementNum: number, name: string, link: string}>(collectionName: string, args: T) {
async add<T extends { id: string; parentID: string, elementNum: number, name: string, link: string}>(collectionName: string, args: T) {
const db = await this.getDB();
const collection = db.collection(collectionName);
return new Promise((resolve, reject) => {
collection.updateOne({ id: args.id }, {$push: {elements[args.elementNum]: {id: uuid(), name: args.name, link: args.link, elements: [] }}}, (err, res) => {
if (err) {
reject(err);
}
resolve(res);
});
});
}
尝试2导致最后添加Null
{
"id": "1",
"name": "wk1",
"iconFile": "icon.png",
"elements": [
[
{
"id": "2",
"name": "element2",
"link": "https",
"elements": [
{
"id": "1",
"name": "element1",
"link": "https:"
}
]
}
],
[
{
"id": "3",
"name": "element3",
"link": "https://",
"elements": [
{
"id": "4",
"name": "w",
"link": "http:/"
}
]
}
],
[
{
"id": "3",
"name": "element3",
"link": "https://",
"elements": [
{
"id": "4",
"name": "w",
"link": "http://"
}
]
},
{
"id": "3",
"name": "element3",
"link": "https://",
"elements": [
{
"id": "4",
"name": "w",
"link": "http://www."
}
]
}
],
null,
]
}
我想要实现的是以下几点
collection.updateOne({ id: args.id }, {$push: {elements: {id: uuid(), name: args.name, link: args.link, elements: [] }}},
{
"id": "1",
"name": "wk1",
"iconFile": "icon.png",
"elements": [
[
{
"id": "2",
"name": "element2",
"link": "https",
"elements": [
{
"id": "1",
"name": "element1",
"link": "https:"
}
]
},
{
"id": "newid",
"name": "newname",
"link": "newlink"
"elements":[]
}
],
[
{
"id": "3",
"name": "element3",
"link": "https://",
"elements": [
.......
]
}
演示-
使用-
all positional运算符$[]表示更新运算符
应修改指定数组字段中的所有元素
$[]运算符具有以下形式:
{:{”
const args={};
args.elementNum=0;
常数更新={
[`add.$[].elements.${args.elementNum}`]:{
a:1
}
};
控制台日志(更新);
//collection.updateOne({id:args.id},update);//像这样使用
@javascriptnoob我不明白你的意思,请检查演示,我们正在推进add.elements
。这就是你需要的,对吗?@javascriptnoob检查一下,你可以指定add.$[].elements.0
。这就是您要找的吗?@javascriptnoob您可以在JS中传递“add.$[].elements.+args.elementNum
,这将导致add.$[].elements.0
?或者使用add.$[].elements.${args.elementNum}
可以显示您尝试的确切代码?
db.collection.update({ _id: 1, "add.id": "1"},
{ $push: { "add.$[].elements": { id: "3", name: "a", link: "" } } })
db.collection.update({ _id: 1, "add.id": "1"},
{ $push: { "add.$[].elements": [{ id: "3", name: "a", link: "" }] } })