在本文中,我们将详细介绍mongoose中的位置mongoDB的各个方面,并为您提供关于mongodb地理位置的相关解答,同时,我们也将为您带来关于57-1、2、3NoSQL基础及MongoDB、Mo
在本文中,我们将详细介绍mongoose中的位置mongoDB的各个方面,并为您提供关于mongodb 地理位置的相关解答,同时,我们也将为您带来关于57-1、2、3 NoSQL基础及MongoDB、MongoDB基本应用、mongodb索引及复制集、E11000 mongodb mongoose 中的重复键错误索引、E11000 MongoDB mongoose中的重复键错误索引、mongodb / mongoose中的部分索引的有用知识。
本文目录一览:- mongoose中的位置mongoDB(mongodb 地理位置)
- 57-1、2、3 NoSQL基础及MongoDB、MongoDB基本应用、mongodb索引及复制集
- E11000 mongodb mongoose 中的重复键错误索引
- E11000 MongoDB mongoose中的重复键错误索引
- mongodb / mongoose中的部分索引
mongoose中的位置mongoDB(mongodb 地理位置)
每当我尝试在mongodb中存储位置时,它都不会显示,所以我想我做错了什么。我找不到有关如何在猫鼬中存储位置的任何文档,所以我只想在这里问一下。
我首先创建我的模型:
var eventSchema = mongoose.Schema({ name : String, creator : String, location : { type: [Number], index: ''2dsphere''},});
然后,我尝试将其添加到我的数据库中:
var newevent = new event({ name: name, creator: tokenUser, location : { type: "Point", coordinates: [longitude, latitude] },});
当我查看数据库时,除了位置以外,所有内容都被存储了。
答案1
小编典典我自己修好了。
我在模型中这样做:
loc : { type: {type:String}, coordinates: [Number]},
在下面,我将其设为2dsphere索引。
eventSchema.index({loc: ''2dsphere''});
并向其中添加数据:
loc: { type: "Point", coordinates: [ longitude, latitude ] },
57-1、2、3 NoSQL基础及MongoDB、MongoDB基本应用、mongodb索引及复制集
02MongoDB基本应用
配置环境:
node1:192.168.1.121CentOS release 6.7
[root@node1 ~]# cd mongodb-2.6.4/
[root@node1 mongodb-2.6.4]# ls
mongodb-org-2.6.4-1.x86_64.rpm mongodb-org-shell-2.6.4-1.x86_64.rpm
mongodb-org-mongos-2.6.4-1.x86_64.rpm mongodb-org-tools-2.6.4-1.x86_64.rpm
mongodb-org-server-2.6.4-1.x86_64.rpm
[root@node1 mongodb-2.6.4]# yum install mongodb-org-server-2.6.4-1.x86_64.rpm mongodb-org-shell-2.6.4-1.x86_64.rpm mongodb-org-tools-2.6.4-1.x86_64.rpm -y
[root@node1 mongodb-2.6.4]# cd
[root@node1 ~]# mkdir -p /mongodb/data
[root@node1 ~]# id mongod
uid=496(mongod) gid=492(mongod) groups=492(mongod)
[root@node1 ~]# chown -R mongod.mongod /mongodb/
[root@node1 ~]# vim /etc/mongod.conf
修改
dbpath=/var/lib/mongo
为
dbpath=/mongodb/data
bind_ip=127.0.0.1
#bind_ip=127.0.0.1
#httpinterface=true
httpinterface=true
rest=true
[root@node1 ~]# service mongod start
[root@node1 ~]# ls /mongodb/data/
journal local.0 local.ns mongod.lock _tmp
[root@node1 ~]# du -sh /mongodb/data/
3.1G /mongodb/data/
[root@node1 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::39591 :::*
LISTEN 0 128 *:27017 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 *:111 *:*
LISTEN 0 128 *:28017 *:*
LISTEN 0 128 *:46453 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 100 127.0.0.1:25 *:*
[root@node1 ~]# mongo --host 192.168.1.121
MongoDB shell version: 2.6.4
connecting to: 192.168.1.121:27017/test
Welcome to the MongoDB shell.
For interactive help,type "help".
For more comprehensive documentation,see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
> show dbs
admin (empty)
local 0.078GB
> use testdb
switched to db testdb
> db.stats()
{
"db" : "testdb",
"collections" : 0,'Microsoft YaHei';font-size:10px;"> "objects" : 0,'Microsoft YaHei';font-size:10px;"> "avgobjSize" : 0,'Microsoft YaHei';font-size:10px;"> "dataSize" : 0,'Microsoft YaHei';font-size:10px;"> "storageSize" : 0,'Microsoft YaHei';font-size:10px;"> "numExtents" : 0,'Microsoft YaHei';font-size:10px;"> "indexes" : 0,'Microsoft YaHei';font-size:10px;"> "indexSize" : 0,'Microsoft YaHei';font-size:10px;"> "fileSize" : 0,'Microsoft YaHei';font-size:10px;"> "dataFiLeversion" : {
},'Microsoft YaHei';font-size:10px;"> "ok" : 1
}
> db.version()
2.6.4
> db.getCollectionNames()
[ ]
#插入数据
> db.students.insert({name:"tom",age:23})
WriteResult({ "nInserted" : 1 })
> show collections
students
system.indexes
admin (empty)
local 0.078GB
testdb 0.078GB
> db.students.stats()
"ns" : "testdb.students",'Microsoft YaHei';font-size:10px;"> "count" : 1,'Microsoft YaHei';font-size:10px;"> "size" : 112,'Microsoft YaHei';font-size:10px;"> "avgobjSize" : 112,'Microsoft YaHei';font-size:10px;"> "storageSize" : 8192,'Microsoft YaHei';font-size:10px;"> "numExtents" : 1,'Microsoft YaHei';font-size:10px;"> "nindexes" : 1,'Microsoft YaHei';font-size:10px;"> "lastExtentSize" : 8192,'Microsoft YaHei';font-size:10px;"> "paddingFactor" : 1,'Microsoft YaHei';font-size:10px;"> "systemFlags" : 1,'Microsoft YaHei';font-size:10px;"> "userFlags" : 1,'Microsoft YaHei';font-size:10px;"> "totalIndexSize" : 8176,'Microsoft YaHei';font-size:10px;"> "indexSizes" : {
"_id_" : 8176
}
[ "students","system.indexes" ]
> db.students.insert ({name:"jerry",age:40,gender:"M"})
WriteResult({ "nInserted" : 1 })
"ns" : "test.students",'Microsoft YaHei';font-size:10px;">}
#帮助:
> db.mycoll.help()
> db.mycoll.find.help()
> db.students.find()
{ "_id" : ObjectId("58720933110b5df571418845"),"name" : "jerry","age" : 40,"gender" : "M" }
{ "_id" : ObjectId("58720a26110b5df571418846"),"name" : "tom","age" : 23 }
> db.students.count()
2
> db.students.insert({name:"Ou Yangfeng",Age:90,Course:"Hamogong"})
> db.students.insert({name:"Yang Guo",Age:20,Course:"Meinv Quan"})
> db.students.insert({name:"Guo Jing",Age:40,Course:"Xiangchong Shibazhang"})
#查询年龄大于30的记录
> db.students.find({Age:{$gt: 30}})
{ "_id" : ObjectId("58720b48110b5df571418847"),"name" : "Ou Yangfeng","Age" : 90,"Course" : "Hamogong" }
{ "_id" : ObjectId("58720ba8110b5df571418849"),"name" : "Guo Jing","Age" : 40,"Course" : "Xiangchong Shibazhang" }
#查询年龄在20到40之间的记录
> db.students.find({Age:{$in: [20,40]}})
{ "_id" : ObjectId("58720b71110b5df571418848"),"name" : "Yang Guo","Age" : 20,"Course" : "Meinv Quan" }
#查看年龄不在20到40之间的记录
> db.students.find({Age:{$nin: [20,"age" : 23 }
#查看Age或age值不在20到40之间的记录
> db.students.find({$or: [{Age: {$nin: [20,40]}},{age:{$nin:[20,40]}}]})
#查看Age或age值在20到40之间的记录
> db.students.find({$or: [{Age: {$in: [20,{age:{$in:[20,'Microsoft YaHei';font-size:10px;">#查看存在gender字段的记录
> db.students.find({gender: {$exists: true}})
#查看不存在gender字段的记录
> db.students.find({gender: {$exists: false}})
#修改"tom"的age为21
> db.students.update({name:"tom"},{$set: {age: 21}})
WriteResult({ "nMatched" : 1,"nUpserted" : 0,"nModified" : 1 })
#删除age值为21的记录
> db.students.remove({age:21})
WriteResult({ "nRemoved" : 1 })
#统计Age值在20到40之间的记录数
> db.students.find({Age: {$in: [20,40]}}).count()
2
#显示Age值在20到40之间的记录,仅显示满足条件的第一条记录
#显示Age值在20到40之间的记录,第一条记录不显示
> db.students.findOne({Age: {$gt: 10}})
"_id" : ObjectId("58720b48110b5df571418847"),'Microsoft YaHei';font-size:10px;"> "name" : "Ou Yangfeng",'Microsoft YaHei';font-size:10px;"> "Age" : 90,'Microsoft YaHei';font-size:10px;"> "Course" : "Hamogong"
#删除students表
> db.students.drop()
true
> show collections;
system.indexes
"db" : "test",'Microsoft YaHei';font-size:10px;"> "collections" : 2,'Microsoft YaHei';font-size:10px;"> "objects" : 1,'Microsoft YaHei';font-size:10px;"> "avgobjSize" : 48,'Microsoft YaHei';font-size:10px;"> "dataSize" : 48,'Microsoft YaHei';font-size:10px;"> "storageSize" : 16384,'Microsoft YaHei';font-size:10px;"> "numExtents" : 2,'Microsoft YaHei';font-size:10px;"> "fileSize" : 67108864,'Microsoft YaHei';font-size:10px;"> "nsSizeMB" : 16,'Microsoft YaHei';font-size:10px;"> "dataFiLeversion" : {
"major" : 4,'Microsoft YaHei';font-size:10px;"> "minor" : 5
"extentFreeList" : {
"num" : 2,'Microsoft YaHei';font-size:10px;"> "totalSize" : 139264
#删除数据库
> db.dropDatabase()
{ "dropped" : "test","ok" : 1 }
03mongodb索引及复制集[root@node1 ~]# mongo
connecting to: test
> for (i=1;i<=10000;i++) db.students.insert({name:"student"+i,age:(i%120),address:"#85 Wenhua Road,Zhengzhou,China"})
> db.students.find().count()
10000
{ "_id" : ObjectId("5871e94113222f399a5240a3"),'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54561"),"name" : "student1","age" : 1,"address" : "#85 Wenhua Road,China" }
{ "_id" : ObjectId("587232dba7eb9c0c7bd54562"),"name" : "student2","age" : 2,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54563"),"name" : "student3","age" : 3,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54564"),"name" : "student4","age" : 4,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54565"),"name" : "student5","age" : 5,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54566"),"name" : "student6","age" : 6,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54567"),"name" : "student7","age" : 7,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54568"),"name" : "student8","age" : 8,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54569"),"name" : "student9","age" : 9,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd5456a"),"name" : "student10","age" : 10,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd5456b"),"name" : "student11","age" : 11,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd5456c"),"name" : "student12","age" : 12,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd5456d"),"name" : "student13","age" : 13,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd5456e"),"name" : "student14","age" : 14,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd5456f"),"name" : "student15","age" : 15,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54570"),"name" : "student16","age" : 16,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54571"),"name" : "student17","age" : 17,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54572"),"name" : "student18","age" : 18,'Microsoft YaHei';font-size:10px;">{ "_id" : ObjectId("587232dba7eb9c0c7bd54573"),"name" : "student19","age" : 19,China" }
#在name字段上构建一个升序索引
> db.students.ensureIndex({name: 1})
"createdCollectionAutomatically" : false,'Microsoft YaHei';font-size:10px;"> "numIndexesBefore" : 1,'Microsoft YaHei';font-size:10px;"> "numIndexesAfter" : 2,'Microsoft YaHei';font-size:10px;">#显示表中索引
> db.students.getIndexes()
[
{
"v" : 1,'Microsoft YaHei';font-size:10px;"> "key" : {
"_id" : 1
},'Microsoft YaHei';font-size:10px;"> "name" : "_id_",'Microsoft YaHei';font-size:10px;"> "ns" : "testdb.students"
"name" : 1
"name" : "name_1",'Microsoft YaHei';font-size:10px;"> }
]
#删除索引
> db.students.dropIndex("name_1")
{ "nIndexesWas" : 2,"ok" : 1 }
#创建唯一索引
> db.students.ensureIndex({name: 1},{unique: true})
"unique" : true,'Microsoft YaHei';font-size:10px;">]
#创建唯一索引后,新增相同字段值会提示错误
> db.students.insert({name: "student20",age: 20,})
WriteResult({
"nInserted" : 0,'Microsoft YaHei';font-size:10px;"> "writeError" : {
"code" : 11000,'Microsoft YaHei';font-size:10px;"> "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: testdb.students.$name_1 dup key: { : \"student20\" }"
})
> db.students.find({name: "student5000"})
{ "_id" : ObjectId("587232e4a7eb9c0c7bd558e8"),"name" : "student5000","age" : 80,'Microsoft YaHei';font-size:10px;">#显示查找语句执行过程
> db.students.find({name: "student5000"}).explain()
"cursor" : "BtreeCursor name_1",'Microsoft YaHei';font-size:10px;"> "ismultikey" : false,'Microsoft YaHei';font-size:10px;"> "n" : 1,'Microsoft YaHei';font-size:10px;"> "nscannedobjects" : 1,'Microsoft YaHei';font-size:10px;"> "nscanned" : 1,'Microsoft YaHei';font-size:10px;"> "nscannedobjectsAllPlans" : 1,'Microsoft YaHei';font-size:10px;"> "nscannedAllPlans" : 1,'Microsoft YaHei';font-size:10px;"> "scanAndOrder" : false,'Microsoft YaHei';font-size:10px;"> "indexOnly" : false,'Microsoft YaHei';font-size:10px;"> "nYields" : 0,'Microsoft YaHei';font-size:10px;"> "nChunkSkips" : 0,'Microsoft YaHei';font-size:10px;"> "millis" : 0,'Microsoft YaHei';font-size:10px;"> "indexBounds" : {
"name" : [
[
"student5000",'Microsoft YaHei';font-size:10px;"> "student5000"
]
]
"server" : "node1:27017",'Microsoft YaHei';font-size:10px;"> "filterSet" : false
> db.students.find({name: {$gt: "student5000"}}).explain()
"n" : 5552,'Microsoft YaHei';font-size:10px;"> "nscannedobjects" : 5552,'Microsoft YaHei';font-size:10px;"> "nscanned" : 5552,'Microsoft YaHei';font-size:10px;"> "nscannedobjectsAllPlans" : 5552,'Microsoft YaHei';font-size:10px;"> "nscannedAllPlans" : 5552,'Microsoft YaHei';font-size:10px;"> "nYields" : 43,'Microsoft YaHei';font-size:10px;"> "millis" : 13,'Microsoft YaHei';font-size:10px;"> {
}
}
E11000 mongodb mongoose 中的重复键错误索引
以下是我在模型中的user
架构-user.js
var userSchema = new mongoose.Schema({
local: {
name: { type: String },email : { type: String,require: true,unique: true },password: { type: String,require:true },},facebook: {
id : { type: String },token : { type: String },email : { type: String },name : { type: String }
}
});
var User = mongoose.model('User',userSchema);
module.exports = User;
这就是我在控制器中使用它的方式 -
var user = require('./../models/user.js');
这就是我将它保存在数据库中的方式 -
user({'local.email' : req.body.email,'local.password' : req.body.password}).save(function(err,result){
if(err)
res.send(err);
else {
console.log(result);
req.session.user = result;
res.send({"code":200,"message":"Record inserted successfully"});
}
});
错误 -
{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: mydb.users.$email_1 dup key: { : null }"}
我检查了数据库集合并且不存在这样的重复条目,让我知道我做错了什么?
仅供参考 - req.body.email
并且req.body.password
正在获取值。
如果我完全删除,那么它会插入文档,否则即使我在 local.email 中有一个条目,它也会抛出错误“重复”错误
E11000 MongoDB mongoose中的重复键错误索引
以下是我user
在user.js
模型中的架构-
var userSchema = new mongoose.Schema({ local: { name: { type: String }, email : { type: String, require: true, unique: true }, password: { type: String, require:true }, }, facebook: { id : { type: String }, token : { type: String }, email : { type: String }, name : { type: String } }});var User = mongoose.model(''User'',userSchema);module.exports = User;
这就是我在控制器中使用它的方式-
var user = require(''./../models/user.js'');
这就是我将其保存在数据库中的方式-
user({''local.email'' : req.body.email, ''local.password'' : req.body.password}).save(function(err, result){ if(err) res.send(err); else { console.log(result); req.session.user = result; res.send({"code":200,"message":"Record inserted successfully"}); }});
错误 -
{"name":"MongoError","code":11000,"err":"insertDocument :: caused by :: 11000 E11000 duplicate key error index: mydb.users.$email_1 dup key: { : null }"}
我检查了数据库集合,没有这样的重复条目,让我知道我在做什么错吗?
仅供参考- req.body.email
和req.body.password
被获取的值。
我也检查了这篇文章,但没有帮助STACK
LINK
如果我将其完全删除,则它将插入文档,否则即使我在local.email中有条目,也会引发错误“ Duplicate”错误
答案1
小编典典错误消息是说已经有一条记录null
作为电子邮件。换句话说,您已经有一个没有电子邮件地址的用户。
相关文档:
如果文档在唯一索引中没有索引字段的值,则索引将为此文档存储一个空值。由于存在独特的约束,MongoDB将只允许一个缺少索引字段的文档。如果有多个文档没有索引字段的值,或者缺少索引字段,则索引构建将失败,并出现重复的键错误。
您可以将唯一性约束与稀疏索引结合使用,以从唯一性索引中过滤这些空值并避免错误。
唯一索引
稀疏索引仅包含具有索引字段的文档条目,即使索引字段包含空值也是如此。
换句话说,对于多个都具有null
值的文档,稀疏索引是可以的。
稀疏索引
来自评论:
您的错误表明该键已命名mydb.users.$email_1
,这使我怀疑您在users.email
和上都有一个索引users.local.email
(当前该键旧且未使用)。从猫鼬模型中删除字段不会影响数据库。检查mydb.users.getIndexes()
是否存在这种情况,并使用手动删除不需要的索引mydb.users.dropIndex(<name>)
。
mongodb / mongoose中的部分索引
在稀疏索引文档中,我发现了有关mongodb 3.2部分索引的说明
在版本3.2中进行了更改:从MongoDB
3.2开始,MongoDB提供了创建部分索引的选项。部分索引提供了稀疏索引功能的超集。如果您使用的是MongoDB
3.2或更高版本,则应优先使用部分索引而不是稀疏索引。
部分索引非常有用,我想在项目中使用它们。可以和猫鼬一起使用吗?
关于mongoose中的位置mongoDB和mongodb 地理位置的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于57-1、2、3 NoSQL基础及MongoDB、MongoDB基本应用、mongodb索引及复制集、E11000 mongodb mongoose 中的重复键错误索引、E11000 MongoDB mongoose中的重复键错误索引、mongodb / mongoose中的部分索引的相关信息,请在本站寻找。
本文标签: