addToSet mongodb不工作
当前文件addToSet mongodb不工作,mongodb,mongodb-query,Mongodb,Mongodb Query,当前文件 { "_id" : ObjectId("53d9c7654dfe220f0e8b45bb"), "cd" : 1406781202, "op" : [ { "fr" : "test test" } ], } 我只想更新op,如下例所示: { "_id" : ObjectId("53d9c7654dfe220f0e8b45bb"), "cd" : 1406781202, "op" : [ {
{
"_id" : ObjectId("53d9c7654dfe220f0e8b45bb"),
"cd" : 1406781202,
"op" : [
{
"fr" : "test test"
}
],
}
我只想更新op,如下例所示:
{
"_id" : ObjectId("53d9c7654dfe220f0e8b45bb"),
"cd" : 1406781202,
"op" : [
{
"fr" : "test test"
},
{
"hi" : "test 123",
},
{
"mp" : "test abc",
}
],
}
在上面的例子中,fr索引存在于更新之前,我添加了hi
请让我知道这个问题
这是实现这一目标的理想方式吗?ie我正在用索引fr、hi等将数据保存在op中,所以该字段应该只这样 db.collection.update{{u id:ObjectId53d9c7654dfe220f0e8b45bb},{$set:{op.hi:test 45}}我通常的意思是,您似乎在使用值作为键,这是一种不应该遵循的反模式。原来的帖子甚至没有显示数组,但结构仍然没有太好 你应该有这样的东西: { _id:Objectd53D9C7654DFE220F0E8B45BB, cd:1406781202, 作品:[ { 键:fr,值:测试 } ], } 然后可以按如下方式将元素推入数组: db.collection.update {u id:ObjectId53d9c7654dfe220f0e8b45bb}, { $push:{ op:{ 每元:[ {key:hi,value:test 123}, {key:mp,value:test abc} ] } } } 通过这种方式,您只需在所有选项上为您的集合创建一个索引 db.collection.ensureIndex{op.key:1} 您也可以这样查询: db.collection.find{op.key:fr} 而不是使用不能使用索引(如$exists)的运算符 db.collection.find{op.fr:{$exists:true}
这就是您当前需要解决的问题。提供的答案没有解释的是,这不是数组类型$addToSet用于数组,这是您真正应该使用的。使用值作为键是个坏消息。是的,我想使用op作为数组类型,但在这种情况下,我无法更新fr或hi,因为在这种情况下,我必须使用Push和pull…如果我错了,请告诉我op字段当前不是数组。你真的在问如何把它变成一个数组吗?我可以把它做成一个数组…但在这种情况下,我将如何更新fr或hi字段???因为在这种情况下,我必须使用推拉…所以请建议我解决方案…op可以有多个索引,我也想更新它们。@NeilLunn请评论?