mongodb在子集数组中添加元素时出错
我想在子集数组中添加一个元素,但它给出了一个错误。我怎样才能解决这个问题 错误:mongodb在子集数组中添加元素时出错,mongodb,Mongodb,我想在子集数组中添加一个元素,但它给出了一个错误。我怎样才能解决这个问题 错误: error: { "$err" : "Can't canonicalize query: BadValue Unsupported projection option: $push: { Questions: [ { _id: ObjectId('5565841ca6df1a168c4d8049'), CreationDate: new Date(1432716315502), IsActive: true
error: {
"$err" : "Can't canonicalize query: BadValue Unsupported projection option: $push: { Questions: [ { _id: ObjectId('5565841ca6df1a168c4d8049'), CreationDate: new Date(1432716315502), IsActive: true, Name: \"uuu\", IsRequired: true, QuestionType: 1.0, AnswerInputType: 1.0, AnswerValidationPattern: null, AnswerValidationMessage: null, QuestionOrder: 0.0 } ] }",
"code" : 17287
}
更新查询:
db.getCollection('forms').find({ "_id" : ObjectId("55657c94a6df1a155c779cd1") },
{
"$push" : {
"Questions" :
[ {
"_id" : ObjectId("5565841ca6df1a168c4d8049"),
"CreationDate" : ISODate("2015-05-27T08:45:16.502Z"),
"IsActive" : true,
"Name" : "uuu",
"IsRequired" : true,
"QuestionType" : 1,
"AnswerInputType" : 1,
"AnswerValidationPattern" : null,
"AnswerValidationMessage" : null,
"QuestionOrder" : 0
} ]
},
"$inc" : { "QuestionCount" : 1 } }
)
find
方法替换为update
$set
而不是$push
添加第一个元素(或整个问题数组,如果可能的话),它将正常工作李>
您只需要在创建数组后,而不是在数组为null时,推送即可将新元素添加到数组中。应该是这样的:
db.getCollection('forms').update(
{ "_id" : ObjectId("55657c94a6df1a155c779cd2") },
{ "$set" : { "Questions" : [
{"_id":ObjectId("55659c93a6df1a22e0f93a2b"),
"CreationDate": ISODate("2015-05-27T10:29:39.922Z"),
"IsActive" : true,
"Name" : "ddd",
"IsRequired" : false,
"QuestionType" : 1,
"AnswerInputType" : 1,
"AnswerValidationPattern" : null,
"AnswerValidationMessage" : null,
"QuestionOrder" : 0
}]
},
"$inc" : { "QuestionCount" : 1 }
})
一旦将此数组设置为上述值,它将有一个元素。然后,您可以使用push
将更多元素推送到它:
db.getCollection('forms').update(
{"_id": ObjectId("55657c94a6df1a155c779cd2")},
{"$push":
{"Questions":
{"_id": ObjectId("55659c93a6df1a22e0f93a2d"),
"CreationDate" : ISODate("2015-05-27T10:40:39.922Z"),
"IsActive" : true,
"Name" : "ccc",
"IsRequired" : false,
"QuestionType" : 1,
"AnswerInputType" : 1,
"AnswerValidationPattern" : null,
"AnswerValidationMessage" : null,
"QuestionOrder" : 0 } },
"$inc" : { "QuestionCount" : 1 } } )
我得到了与Ruby 2.7.1和MongoID 7.1.2完全相同的错误消息
The field 'license_caches' must be an array but is of type null in document
我可以通过检查嵌入的文档是否为空来解决此问题:
if self.license_caches.empty?
self.license_caches = [licenseCach]
else
self.license_caches.push licenseCach
end
这对我来说是个好办法。希望这对收到相同错误消息的每个人都有帮助。可以,但错误已更改。错误:“问题”字段必须是数组,但文档中的类型为NULL。我使用您的代码更新了我的数据库集合。我所做的只是将
查找
替换为更新
。你检查了开始括号和结束括号的匹配吗?我检查了括号,但没有发现任何东西。再次给出错误字段'Questions'必须是数组,但在文档{{u-id:ObjectId('55657c94a6df1a155c779cd1')}db.getCollection('forms')。update({u-id:ObjectId('55657c94a6df1a155c779cd1')},{push:'Questions':{u id:ObjectId(“55659c93a6df1a22e0f93a2b”),“CreationDate”:ISODate(“2015-05-27T10:29:39.922Z”),“IsActive”:true,“Name”:“ddd”,“IsRequired”:false,“QuestionType”:1,“AnswerInputType”:1,“AnswerValidationPattern”:null,“AnswerValidationMessage”:null,“QuestionOrder”:0},$inc:{“QuestionCount”:1})你能在这里传递db.getCollection('forms').find({“_id”:ObjectId(“55657c94a6df1a155c779cd1”)})的输出吗?我想重新生成元素,以获得实例上的确切元素并对其进行测试。