Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database MongoDB$push-in数组的数组错误:速记属性';元素';_Database_Mongodb_Typescript_Mongodb Query_Push - Fatal编程技术网

Database MongoDB$push-in数组的数组错误:速记属性';元素';

Database 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) {

我希望将数据添加到元素中,但出现错误。如何解决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) {
    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: "" }] } })