注意了,上述语句中是直接采用Object的类型。
2、单步调试的结果
3、swagger接口的结果
在上面两幅图中,_id的值展示有差异的,不过实质的值都是相同的。在代码中_id是以字符串的形式展示,而在swagger中_id是以ObjectId的对象展示。
Java中MongoDB返回ObjectId的差异
标签:相同 code objectid isp mongod load 若是 结果 god
小编还为您整理了以下内容,可能对您也有帮助:
mongodb中ObjectId和ObjectId.toString查询有什么区别
mongodb中ObjectId和ObjectId.toString查询有什么区别
urlencode() 返回一个请求字符串格式的数据字符串 (如, "a=2&b=3&b=5" )。
一个完整的例子
例如, 给定这个HTML表单:
<form action="/foo/bar/" method="post">
<input type="text" name="your_name" />
<select multiple="multiple" name="bands">
<option value="beatles">The Beatles</option>
<option value="who">The Who</option>
<option value="zombies">The Zombies</option>
</select>
<input type="submit" />
</form>
如果用户在 your_name 中输入 "John Smith" ,并且在多选框中同时选择了The Beatles和The Zombies,那么以下就是Django的request对象所拥有的:
mongodb 为什么要用objectid 不用string
可以发现这里多出一个Objectid类型的_id,当然了,这个_id是系统默认生成的,你也可以为其指定一个值,不过在同一collections中该值必须是唯一的
把 ObjectId("4df2dcec2cdcd20936a8b817")这串值拿出来并对照官网的解析来深入分析。
"4df2dcec2cdcd20936a8b817" 以这段字符串为例来进行解析,这是一个24位的字符串,看起来很长,很难理解,实际上它是由ObjectId(string)所创建的一组十六进制的字 符,每个字节两位的十六进制数字,总共使用了12字节的存储空间,可能有些朋友会感到很奇怪,居然是用了12个字节,而mysql的INT类型也只有4个 字节,不过按照现在的存储设备,多出来的这点字节也应该不会成为什么瓶颈,实际上,mongodb在设计上无处不在的体现着用空间换时间的思想,接下看吧
mongodb 为什么要用objectid 不用string
可以发现这里多出一个Objectid类型的_id,当然了,这个_id是系统默认生成的,你也可以为其指定一个值,不过在同一collections中该值必须是唯一的
把 ObjectId("4df2dcec2cdcd20936a8b817")这串值拿出来并对照官网的解析来深入分析。
"4df2dcec2cdcd20936a8b817" 以这段字符串为例来进行解析,这是一个24位的字符串,看起来很长,很难理解,实际上它是由ObjectId(string)所创建的一组十六进制的字 符,每个字节两位的十六进制数字,总共使用了12字节的存储空间,可能有些朋友会感到很奇怪,居然是用了12个字节,而mysql的INT类型也只有4个 字节,不过按照现在的存储设备,多出来的这点字节也应该不会成为什么瓶颈,实际上,mongodb在设计上无处不在的体现着用空间换时间的思想,接下看吧
mongodb 为什么不能指定objectid插入报错
在MongoDB中,db.collection.insert()方法添加一个新文档到集合中。另外,db.collection.update()方法和db.collection.save()方法也能通过upsert操作添加新文档。upsert操作执行更新现有文档或者当文档不存在时插入一个新文档。
insert()方法:
下面是在inventory集合中插入一个三个字段的文档:
复制代码
代码如下:
db.inventory.insert( { _id: 10, type: "misc",
item: "card", qty: 15 } )
在实示例中,文档有一个用户指定的值为10的_id字段,这个值必须在inventory集合中唯一。
update()方法:
调用update()方法使用upsert标志创建一个新文档当没有匹配查询条件的文档时。下面的例子当inventory集合中没有包含{type:"books",item:"journal"}的文档时创建一个新文档:
复制代码
代码如下:
db.inventory.update(
{ type: "book",
item : "journal" },
{ $set : { qty: 10 }
},
{ upsert :true }
)
mongodb 为什么不能指定objectid插入报错
在MongoDB中,db.collection.insert()方法添加一个新文档到集合中。另外,db.collection.update()方法和db.collection.save()方法也能通过upsert操作添加新文档。upsert操作执行更新现有文档或者当文档不存在时插入一个新文档。
insert()方法:
下面是在inventory集合中插入一个三个字段的文档:
复制代码
代码如下:
db.inventory.insert( { _id: 10, type: "misc",
item: "card", qty: 15 } )
在实示例中,文档有一个用户指定的值为10的_id字段,这个值必须在inventory集合中唯一。
update()方法:
调用update()方法使用upsert标志创建一个新文档当没有匹配查询条件的文档时。下面的例子当inventory集合中没有包含{type:"books",item:"journal"}的文档时创建一个新文档:
复制代码
代码如下:
db.inventory.update(
{ type: "book",
item : "journal" },
{ $set : { qty: 10 }
},
{ upsert :true }
)
java实体类字段名和mongodb中字段名不一致要怎么办
给映射存储到 mongodb 的字段取别名
在 java bean 中字段名为 firstName,存储到 mongo 中 key 为 fName
java实体类字段名和mongodb中字段名不一致要怎么办
给映射存储到 mongodb 的字段取别名
在 java bean 中字段名为 firstName,存储到 mongo 中 key 为 fName
请问mongoose如何判断字符串是否是标准的ObjectId
在nodejs操作mongodb的时候,在传递ObjectId的时候通常都是用字符串形式传递,如果需要转成ObjectId类型,可以使用如下方法:
var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('576cd26698785e4913b5d0e1');
查看下转换后的类型:
console.log(typeof '576cd26698785e4913b5d0e1');
// output: string
console.log(typeof mongoose.Types.ObjectId('576cd26698785e4913b5d0e1'));
// output: object追问
已自己写了个简单函数判断实现,你的回答牛头不对马嘴,我问的是怎么判断字符串是否是标准的ObjectId,你回答字符串怎么转ObjectId?要这么简单我自己不会查用得着你复制黏贴吗,你可以自己试下mongoose.Types.ObjectId('12334')传入非标准ObjectId字符串控制台会不会报错,
请问mongoose如何判断字符串是否是标准的ObjectId
在nodejs操作mongodb的时候,在传递ObjectId的时候通常都是用字符串形式传递,如果需要转成ObjectId类型,可以使用如下方法:
var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId('576cd26698785e4913b5d0e1');
查看下转换后的类型:
console.log(typeof '576cd26698785e4913b5d0e1');
// output: string
console.log(typeof mongoose.Types.ObjectId('576cd26698785e4913b5d0e1'));
// output: object追问
已自己写了个简单函数判断实现,你的回答牛头不对马嘴,我问的是怎么判断字符串是否是标准的ObjectId,你回答字符串怎么转ObjectId?要这么简单我自己不会查用得着你复制黏贴吗,你可以自己试下mongoose.Types.ObjectId('12334')传入非标准ObjectId字符串控制台会不会报错,
如何用Java操作MongoDB
HelloWorld程序
学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序。
首先,要通过Java操作Mongodb,必须先下载Mongodb的Java驱动程序,可以在这里下载。
新建立一个Java工程,将下载的驱动程序放在库文件路径下,程序代码如下:
package com.mkyong.core;import java.net.UnknownHostException;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
/**
* Java + MongoDB Hello world Example
*
*/
public class App {
public static void main(String[] args) {
try {
//实例化Mongo对象,连接27017端口
Mongo mongo = new Mongo("localhost", 27017);
//连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立
DB db = mongo.getDB("yourdb");
// Get collection from MongoDB, database named "yourDB"
//从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立
DBCollection collection = db.getCollection("yourCollection");
// 使用BasicDBObject对象创建一个mongodb的document,并给予赋值。
BasicDBObject document = new BasicDBObject();
document.put("id", 1001);
document.put("msg", "hello world mongoDB in Java");
//将新建立的document保存到collection中去
collection.insert(document);
// 创建要查询的document
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("id", 1001);
// 使用collection的find方法查找document
DBCursor cursor = collection.find(searchQuery);
//循环输出结果
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
System.out.println("Done");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
}
}
最后,输出的结果为:
{ "_id" : { "$oid" : "4dbe5596dceace565d229dc3"} ,"id" : 1001 , "msg" : "hello world mongoDB in Java"}
Done
在上面的例子中,演示了使用Java对Mongodb操作的重要方法和步骤,首先通过创建Mongodb对象,传入构造函数的参数是Mongodb的数据库所在地址和端口,然后使用
getDB方法获得要连接的数据库名,使用getCollection获得数据集合的名,然后通过新建立BasicDBObject对象去建立document,最后通过collection的insert方法,将建立的document保存到数据库中去。而collection的find方法,则是用来在数据库中查找document。
从Mongodb中获得collection数据集
在Mongodb中,可以通过如下方法获得数据库中的collection:
DBCollection collection = db.getCollection("yourCollection");如果你不知道collection的名称,可以使用db.getCollectionNames()获得集合,然后再遍历,如下:
DB db = mongo.getDB("yourdb");Set collections = db.getCollectionNames();
for(String collectionName : collections){
System.out.println(collectionName);
}
完成的一个例子如下:
package com.mkyong.core;import java.net.UnknownHostException;
import java.util.Set;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
/**
* Java : Get collection from MongoDB
*
*/
public class GetCollectionApp {
public static void main(String[] args) {
try {
Mongo mongo = new Mongo("localhost", 27017);
DB db = mongo.getDB("yourdb");
Set<String> collections = db.getCollectionNames();
for (String collectionName : collections) {
System.out.println(collectionName);
}
DBCollection collection = db.getCollection("yourCollection");
System.out.println(collection.toString());
System.out.println("Done");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
}
}
Mongodb中如何插入数据
下面,讲解下如何使用4种方式,将JSON数据插入到Mongodb中去。首先我们准备JSON
格式的数据,如下:
{"database" : "mkyongDB",
"table" : "hosting",
"detail" :
{
records : 99,
index : "vps_index1",
active : "true"
}
}
}
我们希望用不同的方式,通过JAVA代码向Mongodb插入以上格式的JSON数据
第一种方法,是使用BasicDBObject,方法如下代码所示:
BasicDBObject document = new BasicDBObject();document.put("database", "mkyongDB");
document.put("table", "hosting");
BasicDBObject documentDetail = new BasicDBObject();
documentDetail.put("records", "99");
documentDetail.put("index", "vps_index1");
documentDetail.put("active", "true");
document.put("detail", documentDetail);
collection.insert(document);
第二种方法是使用BasicDBObjectBuilder对象,如下代码所示:
BasicDBObjectBuilder documentBuilder = BasicDBObjectBuilder.start().add("database", "mkyongDB")
.add("table", "hosting");
BasicDBObjectBuilder documentBuilderDetail = BasicDBObjectBuilder.start()
.add("records", "99")
.add("index", "vps_index1")
.add("active", "true");
documentBuilder.add("detail", documentBuilderDetail.get());
collection.insert(documentBuilder.get());
第三种方法是使用Map对象,代码如下:
Map documentMap =new HashMap();documentMap.put("database", "mkyongDB");
documentMap.put("table", "hosting");
Map documentMapDetail =new HashMap();
documentMapDetail.put("records", "99");
documentMapDetail.put("index", "vps_index1");
documentMapDetail.put("active", "true");
documentMap.put("detail", documentMapDetail);
collection.insert(new BasicDBObject(documentMap));
第四种方法,也就是最简单的,即直接插入JSON格式数据
String json ="{'database' : 'mkyongDB','table' : 'hosting',"+
"'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' : 'true'}}}";
DBObject dbObject =(DBObject)JSON.parse(json);
collection.insert(dbObject);
这里使用了JSON的parse方法,将解析后的JSON字符串转变为DBObject对象后再直接插入到collection中去。
完整的代码如下所示:
packagecom.mkyong.core;
importjava.net.UnknownHostException;
importjava.util.HashMap;
importjava.util.Map;
importcom.mongodb.BasicDBObject;
importcom.mongodb.BasicDBObjectBuilder;
importcom.mongodb.DB;
importcom.mongodb.DBCollection;
importcom.mongodb.DBCursor;
importcom.mongodb.DBObject;
importcom.mongodb.Mongo;
importcom.mongodb.MongoException;
importcom.mongodb.util.JSON;
/**
* Java MongoDB : Insert a Document
*
*/
publicclass InsertDocumentApp {
publicstaticvoid main(String[] args){
try{
Mongo mongo =new Mongo("localhost", 27017);
DB db = mongo.getDB("yourdb");
// get a single collection
DBCollection collection = db.getCollection("mmyColl");
// BasicDBObject example
System.out.println("BasicDBObject example...");
BasicDBObject document =new BasicDBObject();
document.put("database", "mkyongDB");
document.put("table", "hosting");
BasicDBObject documentDetail =new BasicDBObject();
documentDetail.put("records", "99");
documentDetail.put("index", "vps_index1");
documentDetail.put("active", "true");
document.put("detail", documentDetail);
collection.insert(document);
DBCursor cursorDoc = collection.find();
while(cursorDoc.hasNext()){
System.out.println(cursorDoc.next());
}
collection.remove(new BasicDBObject());
// BasicDBObjectBuilder example
System.out.println("BasicDBObjectBuilder example...");
BasicDBObjectBuilder documentBuilder = BasicDBObjectBuilder.start()
.add("database", "mkyongDB")
.add("table", "hosting");
BasicDBObjectBuilder documentBuilderDetail = BasicDBObjectBuilder.start()
.add("records", "99")
.add("index", "vps_index1")
.add("active", "true");
documentBuilder.add("detail", documentBuilderDetail.get());
collection.insert(documentBuilder.get());
DBCursor cursorDocBuilder = collection.find();
while(cursorDocBuilder.hasNext()){
System.out.println(cursorDocBuilder.next());
}
collection.remove(new BasicDBObject());
// Map example
System.out.println("Map example...");
Map documentMap =new HashMap();
documentMap.put("database", "mkyongDB");
documentMap.put("table", "hosting");
Map documentMapDetail =new HashMap();
documentMapDetail.put("records", "99");
documentMapDetail.put("index", "vps_index1");
documentMapDetail.put("active", "true");
documentMap.put("detail", documentMapDetail);
collection.insert(new BasicDBObject(documentMap));
DBCursor cursorDocMap = collection.find();
while(cursorDocMap.hasNext()){
System.out.println(cursorDocMap.next());
}
collection.remove(new BasicDBObject());
// JSON parse example
System.out.println("JSON parse example...");
String json ="{'database' : 'mkyongDB','table' : 'hosting',"+
"'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' : 'true'}}}";
DBObject dbObject =(DBObject)JSON.parse(json);
collection.insert(dbObject);
DBCursor cursorDocJSON = collection.find();
while(cursorDocJSON.hasNext()){
System.out.println(cursorDocJSON.next());
}
collection.remove(new BasicDBObject());
}catch(UnknownHostException e){
e.printStackTrace();
}catch(MongoException e){
e.printStackTrace();
}
}
}
mongo 非主键 objectid 可以为空吗
向mongodb的collection中插入一条不带“_id”的记录。然后,通过查询刚插入的数据,你会发现自动生成了一个objectId,所以objectid是不会为空的
mongo 非主键 objectid 可以为空吗
向mongodb的collection中插入一条不带“_id”的记录。然后,通过查询刚插入的数据,你会发现自动生成了一个objectId,所以objectid是不会为空的
mongodb中存储文档的_id key作用
MongoDb支持的数据库类型中,_id是其自有产物。下面简单介绍下_id key。
存储在MongoDB集合中的每个文档(document)都有一个默认的主键_id,这个主键名称是固定的,它可以是MongoDB支持的任何数据类型,默认是ObjectId。在关系数据库schema设计中,主键大多是数值型的,比如常用的int和long,并且更通常的是主键的取值由数据库自增获得,这种主键数值的有序性有时也表明了某种逻辑。反观MongoDB,它在设计之初就定位于分布式存储系统,所以它原生的不支持自增主键。
以上参考:http://coderschool.cn/1732.html
总结
_id key可以用户分配,也可以由MongoDB自动分配,一般采用自动分配。
如果未使用_id作为分片key,则应用程序或客户端层要负责保证_id为唯一的,对于分配存在重复_id会有问题。
更新一个document 不会造成_ID被修改。
mongodb中存储文档的_id key作用
MongoDb支持的数据库类型中,_id是其自有产物。下面简单介绍下_id key。
存储在MongoDB集合中的每个文档(document)都有一个默认的主键_id,这个主键名称是固定的,它可以是MongoDB支持的任何数据类型,默认是ObjectId。在关系数据库schema设计中,主键大多是数值型的,比如常用的int和long,并且更通常的是主键的取值由数据库自增获得,这种主键数值的有序性有时也表明了某种逻辑。反观MongoDB,它在设计之初就定位于分布式存储系统,所以它原生的不支持自增主键。
以上参考:http://coderschool.cn/1732.html
总结
_id key可以用户分配,也可以由MongoDB自动分配,一般采用自动分配。
如果未使用_id作为分片key,则应用程序或客户端层要负责保证_id为唯一的,对于分配存在重复_id会有问题。
更新一个document 不会造成_ID被修改。
mongodb insert 插入不成功返回什么
使用save()方法插入一个文档,通过该方法保存一个不包含_id字段的文档或者包含_id字段但该字段值不存在集合中的文档。
代码如下:
db.inventory.save( { type: "book", item: "notebook", qty: 40 } )
MongoDB添加_id字段和分配一个唯一的ObjectId作为它的值。
代码如下:
{ "_id" : ObjectId("51e866e48737f72b32ae4fbc"), "type" : "book", "item" : "notebook", "qty" : 40 }
Java连接mongodb报错了,怎么解决
package com.fz.test;
import java.net.UnknownHostException;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.util.JSON;
public class SimpleTest {
public static void main(String[] args) throws UnknownHostException,
MongoException {
Mongo mg = new Mongo("192.168.2.77", 27017);
// 查询所有的Database
for (String name : mg.getDatabaseNames()) {
System.out.println("dbName: " + name);
}
DB db = mg.getDB("test");
// 查询所有的聚集集合
for (String name : db.getCollectionNames()) {
System.out.println("collectionName: " + name);
}
DBCollection users = db.getCollection("users");
// 查询所有的数据
DBCursor cur = users.find();
while (cur.hasNext()) {
System.out.println(cur.next());
}
System.out.println(cur.count());
System.out.println(cur.getCursorId());
System.out.println(JSON.serialize(cur));
}
}