0

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

"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);

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

4

1 回答 1

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)
});

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

编辑:

我在这里创建了一个关于尝试重构上述代码的问题。

于 2013-11-01T05:12:34.523 回答