0

Node.JS と Mongoose を使用してコレクション型に挿入しようとしている配列があります。次のように定義された DB スキーマ:

//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 に答える