使用Mongoose将嵌套集合插入Mongodb

时间:2013-04-07 16:25:15

标签: node.js mongodb mongoose

我有一个数组,我试图插入到Node.JS和Mongoose的集合类型中。 DB Schema定义如下:

//LIBRARY
var LibrarySchema = new mongoose.Schema({
    name: {type:String, required: true},
    keyw: {type:String, required: true},
    data: {type:String, required: true},
    ref: {url: String}
},
 {collection: 'library'}
)

我已经能够成功插入数组(显示为逗号分隔的列表),但似乎无法掌握我认为简单的东西。我已经阅读了各种文档,这应该工作:

// Dummy Data
var b.topic = "This is my name"
var b.keywords = "keyword1,keyword2,keyword3"
var data = "This is some data, just another string"
var arrRef = []
arrRef[0] = "http://www.website1.com"
arrRef[1] = "http://www.website2.com"
//Create Schema & Save
var lib = new db.Library({
    name: b.topic,
    keyw: b.keywords,
    data: b.data,
    ref: {$addToSet: {url: arrRef}}
})
lib.save(function(err,docs) {
    console.log("Error:" + err)
}

我在数据中想要的是:

name: "This is my name"
keyw: "keyword1,keyword2,keyword3"
data: "This is some data, just another string"
ref:
      url: "http://www.website1.com"
      url: "http://www.website2.com"

关于我做错的任何想法?上面的代码不会填充“ref”字段。

1 个答案:

答案 0 :(得分:1)

正如@WiredPrairie上面的评论所示,ref应该是一个数组,而不是像你在模式中定义的那样的对象。但是,由于ref是urls(字符串)的简单集合,因此每个都不需要url属性,因此不需要是对象。

此外,您可能会发现,使keyw数组更适合您,因为使用$in operator可以更轻松地根据关键字查找文档。

尝试此架构:

{
    name: {type:String, required: true},
    keyw: {type:Array, required: true},
    data: {type:String, required: true},
    ref: []
}

这段代码

var lib = new db.Library({
    name: b.topic,
    keyw: b.keywords.split(','),
    data: b.data,
    ref: arrRef
})

由于这是文档,因此您不需要$addToSet更新时使用该运算符。