与 nodejs、mongoose 和 JSON 对象数组拼接

Posted

技术标签:

【中文标题】与 nodejs、mongoose 和 JSON 对象数组拼接【英文标题】:Splice with nodejs, mongoose and array of JSON objects 【发布时间】:2012-02-03 15:53:35 【问题描述】:

我在 nodejs 中使用 mongoose(指向 mongolab),当我执行 .findOne 并返回结果时,一个字段是 JSON 对象数组,但当我 console.log 得到数组时

[ [object Object], [object Object], [object Object], [object Object], [object Object] ]

当我复制数组的确切内容并手动创建它并 console.log 它时,我看到了所有 JSON。这听起来不是问题,但是当我尝试拼接返回的这个数组时,我遇到了问题。

console.log(arr.splice(0, 1));

输出

[ [object Object], [object Object], [object Object], [object Object] ]

所以它返回所有剩余的对象,而不是删除的对象。当我通过准确复制数组中导致问题的内容来创建数组拼接时,它工作正常(返回的元素是我删除的元素)。

我尝试在 for 循环中遍历数组并记录每个元素,并且 JSON 看起来很好。我有一个解决方法,但不应该做更多的事情来让它像它应该的那样工作......

    // outputs [ [object Object], [object Object]... ]
    console.log(s);

for (var i = 0; i < s.length; i++) 
    if (i == start) 
        el = s[i];
        break;
    


s.splice(start, 1);
s.splice(end, 0, el);

for (var i = 0; i < s.length; i++) 
    // outputs the JSON for each element
    console.log(s[i]);

我还在 w3schools 上尝试了 array.splice 示例,以确保 splice 正常工作并且工作正常。

var fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log("Removed: " + fruits.splice(2,1,"Lemon"));
console.log(fruits);

// OUTPUTS
Removed: Apple
Banana,Orange,Lemon,Mango

【问题讨论】:

【参考方案1】:

感谢 user1123534...您的方法奏效了。 而不是将 playlistSchema 作为

var PlaylistSchema = new Schema(
  userid: 
    type: String,
    index:  unique: true 
  ,
  playlist_name: String,
  songs: [
    title: String,
    url: String,
    source: String,
    duration: String
  ]
);

为数组中的嵌入属性创建一个新模式

var SongSchema = new Schema(
  title: String,
  url: String,
  source: String,
  duration: String
);

并在 playlistSchema 中使用上述模式作为

var PlaylistSchema = new Schema(
  userid: 
    type: String,
    index:  unique: true 
  ,
  playlist_name: String,
  songs: [SongSchema]
);

【讨论】:

【参考方案2】:

经过一番挫折后,我终于弄清楚了这个问题。事实证明,我的模式中没有正确设置返回的对象数组。我需要定义一个将在数组中的对象,然后对于架构中的该属性有类似的东西。

var SongSchema = new Schema(
    title: String,
    url: String,
    source: String,
    duration: String
);

var PlaylistSchema = new Schema(
    userid: 
        type: String,
        index:  unique: true 
    ,
    playlist_name: String,
    songs: [SongSchema]
);

在那之后工作。

【讨论】:

【参考方案3】:

发件人:https://developer.mozilla.org/en/javascript/Reference/Global_Objects/Array/splice

返回

包含已删除元素的数组。如果只移除一个元素,则返回一个元素的数组

splice 更改原始数组。不要打印它返回的内容,打印你调用它后给它的数组。

arr.splice(0, 1);
console.log(arr);

【讨论】:

它确实删除了元素,只是我需要将返回的值粘贴到新位置。我正在尝试将元素从其原始位置移动到新位置。所以我有点需要元素使用 .splice(index, 0, element) 将其粘贴回新索引中。

以上是关于与 nodejs、mongoose 和 JSON 对象数组拼接的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS连接MongoDB和mongoose

字符串化Mongoose对象时nodejs“未定义”

使用mongodb和mongoose(nodejs)的不同字段名称映射多个数据源

通过Mongoose(Node JS)在Mongo DB中插入没有JSON模式的JSON对象

Nodejs Rest API 与 mongoose 和 mongoDB

NodeJS 和 Mongoose:将元素添加到现有的空数组