与 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 对象数组拼接的主要内容,如果未能解决你的问题,请参考以下文章
使用mongodb和mongoose(nodejs)的不同字段名称映射多个数据源
通过Mongoose(Node JS)在Mongo DB中插入没有JSON模式的JSON对象