【问题标题】:Inserting a nested collection into Mongodb with Mongoose使用 Mongoose 将嵌套集合插入到 Mongodb
【发布时间】:2013-03-29 16:26:33
【问题描述】:

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

【问题讨论】:

  • 可能有帮助:ref: {url: String} 应该是 ref: [{url: String}]
  • 我试过了,但它只会创建一个空白数组
  • 哦 -- 试试 lib.ref.addToSet(),因为 $addToSet 在 3.0+ 分支 (docs) 中已被删除。

标签: node.js mongodb mongoose


【解决方案1】:

正如@WiredPrairie 上面的评论所示,ref 应该是一个数组,而不是像您在架构中定义的对象。但是,由于ref 是一个简单的url(字符串)集合,每个都不需要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更新时使用该运算符。

【讨论】:

  • 谢谢——这就是我想要的,我只是不明白正确的语法!
猜你喜欢
  • 2021-08-14
  • 2018-03-24
  • 2016-02-23
  • 2019-11-22
  • 2018-08-21
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 2022-09-29
相关资源
最近更新 更多