您的当前位置:首页Java中MongoDB返回ObjectId的差异

Java中MongoDB返回ObjectId的差异

2023-11-13 来源:哗拓教育
, collectionName);

注意了,上述语句中是直接采用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   

 @Field("fName")   
 private String firstName;

java实体类字段名和mongodb中字段名不一致要怎么办

给映射存储到 mongodb 的字段取别名
在 java bean 中字段名为 firstName,存储到 mongo 中 key 为 fName   

 @Field("fName")   
 private String firstName;

请问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));

      }

      }

      显示全文