在使用mongoose保存文档数组时,如何获取每个文档的ID?

时间:2013-07-30 21:18:49

标签: node.js mongodb mongoose

我有两个看起来像这样的模式:

var ToolBoxSchema = new Schema({
   description: String,
   tools: [{type: ObjectId, ref: 'Tool'}]
});

var Tool = new Schema({
   name: String,
   model: String,
});

假设我有一个新的ToolBox,其中包含一组Tools。我有一个Tools数组,并希望使用mongoose中的create方法保存这些工具,然后为每个工具添加对ToolBox.tools数组的引用。

var toolBoxModel = mongoose.model('ToolBox', ToolBoxSchema);
var toolModel = mongoose.model('Tool', ToolSchema);

var toolbox = new toolBoxModel();
var tool = new toolModel();
var toolsArray = getTools(); 

假设getTools()返回一个包含X个元素的工具数组。 例如:[{名称:“螺丝刀”,型号:“craftman 3000”},{name:“drill”,型号:“black and decker”}]

当我调用模型的create方法时,如何获取已保存的所有文档的列表?

mongoose api docs中的示例显示每个保存的文档作为参数传递给回调函数,但如果每次数组中元素的数量不同,那么我不知道如何获取id的数组中保存的所有元素。

var array = [{ type: 'jelly bean' }, { type: 'snickers' }];
Candy.create(array, function (err, jellybean, snickers) {
  if (err) // ...
});

有没有办法找回所有已保存文档的数组...可能是这样的:

var toolsArray = [{name: "screwdriver", model: "craftman 3000"}, {name: "drill", model: "black and decker"}];
tool.create(toolsArray, function (err, arrayOfToolDocs) {
    if (err) {
        throw err;
    }
    for (var i = 0; i < arrayOfToolDocs.length; i++) {
        toolbox.tools.push(arrayOfToolDocs[i].id);
    }
    toolbox.save();
});

1 个答案:

答案 0 :(得分:1)

您可以使用arguments对象获取传递给任何函数的参数。 例如:

function argNum(){
  console.log(arguments.length);
}
argNum('test',1,23,43); // Logs 4

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments