我有一个数组,我试图插入到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”字段。
答案 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
。 更新时使用该运算符。