如何使用 Monk 在 MongoDB 中插入带有子文档数组元素的文档

Posted

技术标签:

【中文标题】如何使用 Monk 在 MongoDB 中插入带有子文档数组元素的文档【英文标题】:How to insert a document with a subdocument array element in MongoDB with Monk 【发布时间】:2015-12-19 23:42:59 【问题描述】:

当我想在 Mongodb 中插入一个具有子文档数组元素的 Mongodb 文档时,函数将其错误地插入到数据库中。 我这样调用插入函数:

var OrderItem = [];
OrderItem[0] = 
                'model': asd1,
                'size' : M,
                'color' : Black
            ;

OrderItem[1] = 
                'model': bsa2,
                'size' : S,
                'color' : Black
            ;
var newOrdenCompra = 
            'fechaCompra' : d,
            'items' : OrderItem
        ;
 $.ajax(
        type: 'POST',
        data: newOrdenCompra,
        url: '/order/addordercompra',
        dataType: 'JSON'
        ).done(function( response ) 
        
            if (response.msg !== '') 
                alert('Error: ' + response.msg);
            
        );

然后:

/*
 * POST to add orden de compra.
 */
router.post('/addordercompra', function(req, res) 
    var db = req.db;
    var collection = db.get('ordercompra');
    collection.insert(req.body, function(err, result)
        res.send(
            (err === null) ?  msg: ''  :  msg: err 
        );
    );
);

但是我进入 BD 的内容是这样的(我上面写的示例在项目子文档中的属性较少):

> db.ordercompra.find().pretty()

        "_id" : ObjectId("5601b2181430470c1266d415"),
        "fechaCompra" : "2015-09-22T16:54:59Z",
        "items[0][model]" : "CLUB DE LA PELEA",
        "items[0][size]" : "XXXS",
        "items[0][color]" : "CHOCOLATE",
        "items[0][sena]" : "1200",
        "items[0][precio]" : "2600",
        "items[0][ordOT]" : "2",
        "items[0][id]" : "55f9e402ebfcd9b414339f8f",
        "items[1][model]" : "302",
        "items[1][size]" : "M",
        "items[1][color]" : "NEGRO",
        "items[1][sena]" : "0",
        "items[1][precio]" : "2100",
        "items[1][ordOT]" : "",
        "items[1][id]" : "55e76c0d497c742019bbb5f3"

>

如何获取包含子文档数组的元素的结构?我做错了还是插入失败了?

感谢您的帮助!对不起我的英语不好。 尼古拉斯。

【问题讨论】:

您可能应该在客户端使用 JSON.stringify(data),然后在服务器上使用 JSON.parse(req.body) 嗨!,感谢您的帮助!,我可以将 JSON.stringifu(newOrdenCompra) 发送到服务器,但是当我测试它时,如果我解析 req.body,那么函数就会崩溃。如果我不解析它,该函数只会保存一个包含所有数据的字符串。你有什么想法吗? 你的 $.ajax 数据类型也应该是“application/json; charset=utf-8”而不是 JSON 你所说的“函数崩溃”是什么意思。无论如何,我认为您应该只插入不带项目的 fechaCompra,而不是 result.items =[] 和循环中的 result.items.push(items[i]) 和 result.save() 感谢摩尔达的帮助!但我解决了将 dataType 更改为“text”并将 contentType 添加为“application/json”的问题,这样做我不需要解析 req.body ,我只需将 req.body 发送到 insert 函数,它就可以工作了。 – 对于崩溃,我的意思是解析函数抛出一个“意外的令牌 o”错误,因为对象 req.body 已经是一个对象。 【参考方案1】:

我已经解决了发送使用 JSON.stringify 转换的数据的问题,并将 ajax 参数更改为 dataType : 'text' 并添加 contentType: 'application/json'。这样做插入效果很好。 谢谢您的帮助! 示例图片:

BD 看起来像这样:

【讨论】:

以上是关于如何使用 Monk 在 MongoDB 中插入带有子文档数组元素的文档的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb的僧侣vs猫鼬

Mongodb的僧侣vs猫鼬

如何在mongodb索引中使用自己的时间戳

在将它们添加到 MongoDB 之前,如何在 Spring Data 中处理插入请求?

将带有数字键的数据插入 mongodb 时出错(python 字典中的 GPS 数据)

MongoDB 和 Python - 带有列表的字典