猫鼬模型效果不佳

时间:2015-06-12 10:34:51

标签: json node.js mongodb mongoose

现在,我正在为一个项目工作,该项目需要使用NodeJS和MongoDB保留一些有关分析的信息。

当我尝试发送JSon数据时,某些部分会保存到数据库中,但大部分数据都会丢失。我无法理解我在做错的地方。我对这些技术没有足够的背景知识。

这是我的Mongoose.model;

<!-- Table -->
<table class="displayStatsTable" border="1">
    <tbody class="displayStatsTableBody">
        <tr class="displayStatsTableTopRow">
            <th><c:out value="Forename" /></th>
            <th><c:out value="Surname" /></th>
            <th><c:out value="Average Score" /></th>
        </tr>
        <c:forEach var="stats" items="${stats}">
        <tr class="displayStatsTableDataRows">
            <td class="displayStatsTableData">${stats.forename}</td>
            <td class="displayStatsTableData">${stats.surname}</td>
            <td class="displayStatsTableData">${stats.score_avg}</td>
        </tr>           
        </c:forEach>
    </tbody>
</table>

这是我的创建功能;

module.exports = mongoose.model('Products', new Schema({
    unique: Number,
    total: Number,
    hits: {
        String: {
            unique: Number,
            total: Number,
            users:[String]
        }
    }
}));

这是我尝试发布的内容;

var mongoose = require('mongoose'),
    Product = require('../models/products.models')

/**
 * Create a Product
 */
exports.create = function(req, res) {
    var product = new Product(req.body);

    product.save(function(err) {
        if (err)
            return res.status(400);
        else
            res.status(201).json(product);
    });
};

1 个答案:

答案 0 :(得分:0)

使用mongoose类型Mixed

new Schema({
    unique: Number,
    total: Number,
    hits: {}
}

混合“任何事情都有”SchemaType,其灵活性来自于难以维护的权衡。 混合可通过Schema.Types.Mixed或通过传递空对象文字来获得。以下是等效的:

var Person = new Schema({ any: {} });
var Person = new Schema({ any: Schema.Types.Mixed });

由于它是无模式类型,您可以将值更改为您喜欢的任何其他值,但Mongoose无法自动检测/保存这些更改。

要“告诉”Mongoose混合类型的值已更改,请调用文档的.markModified(path)方法,将路径传递给刚刚更改的混合类型。

person.anything = { x: [3, 4, { y: "changed" }] };
person.markModified('anything');
person.save(); // anything will now get saved

===============
“猫鼬”:“^ 4.0.3”,
mongodb版本v2.6.6

var Product = mongoose.model('Products', new mongoose.Schema({
    unique: Number,
    total: Number,
    hits: {}
}));

var product = new Product({
    "unique" : 50,
    "total" : 150,
    "hits" : {
        "11-06-2015" : {
            "unique" : 50,
            "total" : 60,
            "users" : [
                "kris",
                "mark",
                "jom",
                "alpi"
            ]
        },
        "12-06-2015" : {
            "unique" : 50,
            "total" : 90,
            "users" : [
                "kris",
                "mark",
                "jom"
            ]
        }
    }
});
product.save(function(err,p){
   console.log(err,p);
    Product.find(function(err,p){
        console.log(err,p)
    })
})

它适用于我。 由于猫鼬抛出错误[MongoError: key 12.06.2015 must not contain '.'],我将12.06.2015更改为12-06-2015