Arrays 在mongoose中的子文档中推送到数组
我想推送到Mongoose/MongoDB子文档中的数组 以下是模式:Arrays 在mongoose中的子文档中推送到数组,arrays,node.js,mongodb,mongoose,subdocument,Arrays,Node.js,Mongodb,Mongoose,Subdocument,我想推送到Mongoose/MongoDB子文档中的数组 以下是模式: var UsersSchema = new mongoose.Schema({ user: String, stream: String, author: String, tags: Array, thumb: Number, added: Number }) var ContentSchema = new mongoose.Schema( { title: Stri
var UsersSchema = new mongoose.Schema({
user: String,
stream: String,
author: String,
tags: Array,
thumb: Number,
added: Number
})
var ContentSchema = new mongoose.Schema( {
title: String,
url: String,
description: String,
text: String,
users: [ UsersSchema ]
})
我想为特定的用户
子文档将数组推入UserSchema.tags
数组
我尝试过这一点和几种变体:
默认情况下,我的前端Angular应用程序将标记作为对象数组发送。所以是
[ { 'text': TAG_STRING_HERE } ]
or
[ { 'text': TAG_STRING_HERE }, { 'text': TAG2_STRING_HERE } ]
但我也尝试过只使用和字符串数组,如果对象由于某种原因出现问题,我可以这样做
我试过这个:
var tags = req.body.tags,
contentId = mongoose.Types.ObjectId( req.body.id )
Content.update(
{ 'users._id': contentId },
{ $push: { 'users.tags': { $each: tags } } }
).exec()
.then( function ( result ) {
console.log( result )
resolve( result )
}, function ( error ) {
if ( error ) return reject( error )
})
这给了我一个错误:
{ [MongoError: cannot use the part (users of users.tags) to traverse the element ({users: [ { user: "54f6688c55407c0300b883f2", added: 1428080209443.0, stream: "watch", _id: ObjectId('551ec65125927f36cf4c04e9'), tags: [] }, { user: "54f6688c55407c0300b883f2", added: 1428080222696.0, stream: "listen", _id: ObjectId('551ec65e25927f36cf4c04ea'), tags: [] } ]})]
name: 'MongoError',
code: 16837,
err: 'cannot use the part (users of users.tags) to traverse the element ({users: [ { user: "54f6688c55407c0300b883f2", added: 1428080209443.0, stream: "watch", _id: ObjectId(\'551ec65125927f36cf4c04e9\'), tags: [] }, { user: "54f6688c55407c0300b883f2", added: 1428080222696.0, stream: "listen", _id: ObjectId(\'551ec65e25927f36cf4c04ea\'), tags: [] } ]})' }
解决方案如下。注意这是使用Q和Express。注意的部分是
用户。$.tags
。我以为我已经试过了,但我想没有!我还使用了$pushAll
,但是$each
也可以工作。我的标记始终是一个数组
var tags = req.body.tags,
contentId = mongoose.Types.ObjectId( req.body.id )
console.log( tags )
Content.update(
{ 'users._id': contentId },
{ $pushAll: { 'users.$.tags': tags } }
).exec()
.then( function ( result ) {
console.log( result )
resolve( result )
}, function ( error ) {
if ( error ) return reject( error )
})
任何标记数组元素的数据类型是什么?默认情况下,它是一个对象数组,但我也尝试了一个字符串数组。对象类似于[{text:TAG\u STRING\u HERE},{…}]
。