0

我有一个数组,我试图用 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”字段。

4

1 回答 1

1

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

此外,您可能会发现创建数组对您更有效,因为使用$in 运算符keyw根据关键字查找文档会更容易。

试试这个架构:

{
    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. 更新时使用该运算符。

于 2013-04-07T18:08:02.440 回答