如何在node.js和MongoDB中修复我的数组

时间:2016-06-25 11:39:15

标签: node.js forms mongodb mongoose

我的MongoDB中的数组没有按照我希望的方式进行结构化。我正在使用node.js,Express和Mongoose。

这是我的架构:

var fruitSchema = new schema ({
    fruitName: {type: String},
    priceArray: {type: Array}
});

以下是推送新priceArray项目的代码的一部分:

Fruit.findOneAndUpdate({fruitName: req.body.fruitName},
            {
            $push: {
                priceArray: {
                    price: req.body.price,
                    description: req.body.description
                }
            }
        }

以下是表格:

<form method="POST" action="/fruit">
<div class='form-group'>
    <label for="fruitName">Fruit Name</label>
    <input type="text" name="fruitName" id="fruitName"/>
</div>
<div>
    <label for="price0">Price</label>
    <input type="text" name="price[0]" id="price0"/>

    <label for="description0">Description</label>
    <input type="text" name="description[0]" id="description0"/>
</div>
<div>
    <label for="price1">Price</label>
    <input type="text" name="price[1]" id="price1"/>

    <label for="description1">Description</label>
    <input type="text" name="description[1]" id="description1"/>
</div>
<input type="submit" value="submit">
</form>

那么这一切是什么意思?基本上,用户可以输入水果的名称,然后他们将输入水果的价格,并提供描述。因此&#39; &#39; 部分始终在一起。表单允许多个价格/描述对的输入(此处发布的示例表单允许2对,但真实表单允许无限对)。

在我的MongoDB中,这就是上面的代码如何插入表单数据:

{
"fruitName" : "test fruit",
"priceArray" : [ 
    {
        "price" : [ 
            "$2.00", 
            "$3.00"
        ],
        "description" : [ 
            "Good", 
            "Bad"
        ]
    }

以下是我想要的样子:

{
"fruitName" : "test fruit",
"priceArray" : [ 
    {
        "price" : "$2.00"
        "description: "Good" 
    }
    {
        "price" : "$3.00"
        "description" : "Bad"
    }
    ]
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

A)见:

http://mongoosejs.com/docs/subdocs.html

&安培;将架构声明为:

var fruitSchema = new schema ({
    fruitName: {type: String},
    priceArray: [{
    price: String,
    description: String
     }]
});

B) 在日志中查看您的req.body。你必须处理req.body.price&amp;描述 因为它们是独立的数组。因此,您需要相应地更改find​​One&amp;更新。