如何让这个嵌套模式在Mongoose中运行?

时间:2013-10-31 16:34:39

标签: node.js mongodb mongoose

所以我试图弄清楚如何在命令列表中保存多个命令但是我尝试过的所有东西都没有用。这是我到目前为止设置的方式,但是当它保存时,它以

的格式保存
"command_list" : [ { "action" : "goto,goto", "target" : "http://www.google.com,http://www.cnn.com" } ]

当我真的想要像

这样的东西时
"command_list" : [ "command" : { "action" : "goto", "target" : "http://www.google.com" },                     
                   "command" : { "action" : "goto", "target" : "http://www.cnn.com" } ]

有多个命令。到目前为止,我的app.js正在存储这样的数据

var configSample = new Configurations({
        command_list_size: request.body.command_list_size,
        command_list: [ {action: request.body.action, target: request.body.target}] 
});

,模型看起来像这样

var mongoose = require("mongoose");

var command = mongoose.Schema({
    action: String,
    target: String
});

var configSchema = mongoose.Schema({
    command_list_size: Number,
    command_list: [command] 
});


module.exports = mongoose.model('Configurations', configSchema);

那么如何进行嵌套操作呢?谢谢!

1 个答案:

答案 0 :(得分:0)

当您将数据发送到服务器时,您似乎没有正确打包数据。如果您使用以下内容:

command_list: [ {action: request.body.action, target: request.body.target}]

它将抓住所有动作并将它们混合在一起并对目标执行相同的操作。最好将数组发送到服务器,并将文档嵌套在服务器中。

另一种选择是解析数据,一旦你在服务器上收到这些元素就拉出这些元素,但我认为首先将它打包就更容易了。

此外:

如果你想拆分你拥有的东西,你可以使用String.split()方法并重建对象:

// not certain the chaining will work like this, but you get the idea. It works
// on the string values you'll receive
var actions = response.body.action.split(',');
var targets = response.body.target.split(',');

// the Underscore library provides some good tools to manipulate what we have
// combined the actions and targets arrays
var combinedData = _.zip(actions, targets);

// go through the combinedData array and create an object with the correct keys
var commandList = _.map(combinedData, function(value) { 
    return _.object(["action", "target"], value)
});

可能有一种更好的方法来创建新对象,但这可以解决问题。

编辑:

我创建了一个关于尝试to refactor the above code here.

的问题