与nodejs,mongoose和JSON对象数组进行连接

我正在使用mongob(指向mongolab)与nodejs,当我做.findOne并得到一个结果回来,一个字段是一个JSON对象的数组,但是当我console.log我得到的数组

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

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

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

输出

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

所以它将返回所有剩下的对象而不是被删除的对象。 当我在数组上进行拼接时,通过精确地复制数组中引起问题的东西,它可以正常工作(返回的元素是我删除的元素)。

我试着通过在for循环中的数组,并logging每个元素和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例子,以确保拼接一般,它工作正常。

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

       

网上收集的解决方案 "与nodejs,mongoose和JSON对象数组进行连接"

来自: https : //developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice

返回

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

splice改变了原始数组。 不要打印它返回的内容,在打电话给它后打印出你给的数组。

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

经过多次挫折之后,我才弄清楚了这个问题。 事实certificate,返回的对象数组在我的模式中没有正确设置。 我需要定义一个将在数组中的对象,然后在模式中的属性有这样的东西。

 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] }); 

之后工作。

感谢user1123534 …你的方法已经工作。 而不是把playlistSchema当成

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

为数组中embedded的属性创build一个新的模式

 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] });