Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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
Node.js 如何使用Angular使用嵌套JSON更新现有MongoDB文档?_Node.js_Angular_Mongodb_Mean Stack - Fatal编程技术网

Node.js 如何使用Angular使用嵌套JSON更新现有MongoDB文档?

Node.js 如何使用Angular使用嵌套JSON更新现有MongoDB文档?,node.js,angular,mongodb,mean-stack,Node.js,Angular,Mongodb,Mean Stack,我正在尝试将JSON数组存储到具有id的现有文档中。我不知道如何将此阵列发布到后端 cake.component.ts export class CakeComponent implements OnInit { form: FormGroup; constructor( public fb: FormBuilder, private api: ApiService ) { } ngOnInit() { this

我正在尝试将JSON数组存储到具有id的现有文档中。我不知道如何将此阵列发布到后端

cake.component.ts

export class CakeComponent implements OnInit {
    form: FormGroup;

    constructor(
        public fb: FormBuilder,
        private api: ApiService
    ) { }

    ngOnInit() {
        this.submitForm();
    }

    submitForm() {
        this.form = this.fb.group({
            url: ['', [Validators.required]],
            width : ['', [Validators.required]],
            height: ['', [Validators.required]]
        })
    }

    submitForm() {
        if (this.form.valid) {
            this.api.AddCake(this.form.value).subscribe();
        }
    }
}
{
    "id": "0001",
    "type": "donut",
    "name": "Cake"
}
现有MongoDB文档Cakes

export class CakeComponent implements OnInit {
    form: FormGroup;

    constructor(
        public fb: FormBuilder,
        private api: ApiService
    ) { }

    ngOnInit() {
        this.submitForm();
    }

    submitForm() {
        this.form = this.fb.group({
            url: ['', [Validators.required]],
            width : ['', [Validators.required]],
            height: ['', [Validators.required]]
        })
    }

    submitForm() {
        if (this.form.valid) {
            this.api.AddCake(this.form.value).subscribe();
        }
    }
}
{
    "id": "0001",
    "type": "donut",
    "name": "Cake"
}
预期产出

{
    "id": "0001",
    "type": "donut",
    "name": "Cake",
    "image": {
        "url": "images/0001.jpg",
        "width": 200,
        "height": 200
    }
}

以下是基本代码,请相应更新:

/** You can split this code into multiple files, schema into a file &
    mongoDB connectivity into a common file & actual DB update can be placed where ever you want */

const mongoose = require('mongoose')
const Schema = mongoose.Schema;

const cakeSchema = new Schema({
    id: String,
    type: String,
    name: String,
    image: {
        url: String,
        width: Number,
        height: Number
    }
});

const cakeModel = mongoose.model('Cakes', cakeSchema, 'Cakes');

let form = {
    "url": "images/0001.jpg",
    "width": 200,
    "height": 200
}

async function myDbConnection() {

    const url = 'yourDBConnectionString';

    try {
        await mongoose.connect(url, { useNewUrlParser: true });
        console.log('Connected Successfully')
        let db = mongoose.connection;

        // You can use .update() or .updateOne() or .findOneAndUpdate()
        let resp = await cakeModel.findOneAndUpdate({ id: '0001' }, { image: form }, { new: true });
        console.log('successfully updated ::', resp)
        db.close();
    } catch (error) {
        console.log('Error in DB Op ::', error);
        db.close();
    }
}

module.exports = myDbConnection();
更新:

如果您使用的是
mongoDB驱动程序
,而不是
mongoose

const MongoClient = require('mongodb').MongoClient;

// Connection URL
const url = 'yourDBConnectionString';

// Database Name
const dbName = 'test';

// Create a new MongoClient
const client = new MongoClient(url);

let form = {
  "url": "images/0001.jpg",
  "width": 200,
  "height": 200
}

// Use connect method to connect to the Server
client.connect(async function (err) {

  if (err) console.log('DB connection error ::', err)
  console.log("Connected successfully to server");

  try {
    // You can use .update() or .updateOne() or .findOneAndUpdate()
    let resp = await client.db(dbName).collection('Cakes').findOneAndUpdate({ id: '0001' }, { $set: { image: form } }, { returnOriginal: false });
    console.log('successfully updated ::', resp , 'resp value ::', resp.value)
    client.close();
  } catch (error) {
    console.log('Error in DB Op ::', error);
    client.close();
  }
});