首页 文章

使用Mongoose将嵌套集合插入Mongodb

提问于
浏览
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”字段 .

1 回答

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

    由于这是 new 文档,因此您不需要 $addToSet . updating 时使用该运算符 .

相关问题