level 2
ys0798
楼主
问题一:
> db.tmp.find()
{ "_id" : 1, "age" : 1}
{ "_id" : 2, "age" : 2}
{ "_id" : 3, "age" : 3}
{ "_id" : 4, "age" : 4}
{ "_id" : 5, "age" : 5}
{ "_id" : 6, "age" : 6}
{ "_id" : 7, "age" : 7}
{ "_id" : 8, "age" : 8}
{ "_id" : 9, "age" : 10}
> db.tmp.update({age:10},{_id:8,age:11})
cannot change _id of a document old:{ _id:9.0, age: 10.0 } new:{ _id: 8.0, age: 11.0 }
强硬替换当替换的文档和已有文档ID冲突的时候则系统会报错,这里报错可以理解。
>db.tmp.update({age:10},{_id:10,age:11})
cannot change _id of a document old:{ _id:9.0, age: 10.0 } new:{ _id: 10.0, age: 11.0 }
那么这里呢,_id为10的并不存在,依然报错,不是说硬性修改数据,是先删除数据再添加吗,那我删除这条_id为9的,再添加一条_id为10的为何会报错?求解答。
问题二:要把type等于JS的文档增加一个相同的作者author是tom
db.tmp.insert({_id:2,books:[{type:'JS',name:'Js王者归来'},{type:'JS',name:'Js基础'},{type:'nosql',name:'hadoop'}]})
db.tmp.update({'books.type':'JS'},{$set:{'books.$.author':‘tom’}},false,true); --这里我已经执行了批量修改操作,为什么还是不可以呢?
db.tmp.find()
"_id": 2, "books" : [{"author" : "tom", "name": "Js王者归来", "type" : "JS" }, { "type" : "JS", "name": "Js基础" }, {"type" : "nosql","name" :"hadoop" } ] }
我是想让type为JS的均添加一个author的属性,我用批量修改操作的时候,发现数据并没有将数据全部修改,这是为什么?如果要全部修改,语句应该怎么写。
问题三:
查询第二本书是JAVA的学生信息
> db.persons.find({'books.1':'JAVA'},{_id:0,books:1})
{ "books" : [ "PHP", "JAVA", "EXTJS", "C++" ] }
{ "books" : [ "JS", "JAVA", "C#", "MONGODB" ] }
{ "books" : [ "JS", "JAVA", "EXTJS", "MONGODB" ] }
查询第二本书不是JAVA的学生信息:
方法一:
> db.persons.find({'books.1':{$not:'JAVA'}},{_id:0,books:1})
$not 不是取反么?为啥我这里不行,提示有错误
error: { "$err" : "invalid use of $not", "code" : 13041 }
方法二:这个肯定是好使的
> db.persons.find({'books.1':{$ne:'JAVA'}},{_id:0,books:1})
{ "books" : [ "JS", "C++", "EXTJS", "MONGODB" ] }
{ "books" : [ "JS", "C#", "EXTJS", "MONGODB" ] }
{ "books" : [ "JS", "C#", "PHP", "MONGODB" ] }
另外
db.persons.find({$not:{'books.1':'JAVA'}},{_id:0,books:1})
为什么查询不出数据,也不报错?我记得修改的是如:$set的这几个都是放前边的,而查询是放后边的,为啥不报错,也查询不出数据,如果没有报错,那他应该查的是什么??
2014年04月07日 14点04分
1
> db.tmp.find()
{ "_id" : 1, "age" : 1}
{ "_id" : 2, "age" : 2}
{ "_id" : 3, "age" : 3}
{ "_id" : 4, "age" : 4}
{ "_id" : 5, "age" : 5}
{ "_id" : 6, "age" : 6}
{ "_id" : 7, "age" : 7}
{ "_id" : 8, "age" : 8}
{ "_id" : 9, "age" : 10}
> db.tmp.update({age:10},{_id:8,age:11})
cannot change _id of a document old:{ _id:9.0, age: 10.0 } new:{ _id: 8.0, age: 11.0 }
强硬替换当替换的文档和已有文档ID冲突的时候则系统会报错,这里报错可以理解。
>db.tmp.update({age:10},{_id:10,age:11})
cannot change _id of a document old:{ _id:9.0, age: 10.0 } new:{ _id: 10.0, age: 11.0 }
那么这里呢,_id为10的并不存在,依然报错,不是说硬性修改数据,是先删除数据再添加吗,那我删除这条_id为9的,再添加一条_id为10的为何会报错?求解答。
问题二:要把type等于JS的文档增加一个相同的作者author是tom
db.tmp.insert({_id:2,books:[{type:'JS',name:'Js王者归来'},{type:'JS',name:'Js基础'},{type:'nosql',name:'hadoop'}]})
db.tmp.update({'books.type':'JS'},{$set:{'books.$.author':‘tom’}},false,true); --这里我已经执行了批量修改操作,为什么还是不可以呢?
db.tmp.find()
"_id": 2, "books" : [{"author" : "tom", "name": "Js王者归来", "type" : "JS" }, { "type" : "JS", "name": "Js基础" }, {"type" : "nosql","name" :"hadoop" } ] }
我是想让type为JS的均添加一个author的属性,我用批量修改操作的时候,发现数据并没有将数据全部修改,这是为什么?如果要全部修改,语句应该怎么写。
问题三:
查询第二本书是JAVA的学生信息
> db.persons.find({'books.1':'JAVA'},{_id:0,books:1})
{ "books" : [ "PHP", "JAVA", "EXTJS", "C++" ] }
{ "books" : [ "JS", "JAVA", "C#", "MONGODB" ] }
{ "books" : [ "JS", "JAVA", "EXTJS", "MONGODB" ] }
查询第二本书不是JAVA的学生信息:
方法一:
> db.persons.find({'books.1':{$not:'JAVA'}},{_id:0,books:1})
$not 不是取反么?为啥我这里不行,提示有错误
error: { "$err" : "invalid use of $not", "code" : 13041 }
方法二:这个肯定是好使的
> db.persons.find({'books.1':{$ne:'JAVA'}},{_id:0,books:1})
{ "books" : [ "JS", "C++", "EXTJS", "MONGODB" ] }
{ "books" : [ "JS", "C#", "EXTJS", "MONGODB" ] }
{ "books" : [ "JS", "C#", "PHP", "MONGODB" ] }
另外
db.persons.find({$not:{'books.1':'JAVA'}},{_id:0,books:1})
为什么查询不出数据,也不报错?我记得修改的是如:$set的这几个都是放前边的,而查询是放后边的,为啥不报错,也查询不出数据,如果没有报错,那他应该查的是什么??