在Mongoose / MongoDB中创建多字段索引


93

我正在尝试寻找有关如何在Mongoosejs中创建多字段索引的文档,但无济于事。特别是我有两个字段需要索引并且是唯一的。将两个字段索引在一起的示例猫鼬模式是什么?

Answers:


196

您调用index您的方法Schema的对象要做到这一点,如图在这里。对于您的情况,它将类似于:

mySchema.index({field1: 1, field2: 1}, {unique: true});

2
这在mongodb中称为Compount索引。因此,它创建的索引为field1和field1 + field2。因此,它首先是根据字段1的索引,然后是相对于字段2的字段1的内部索引
Ketan Ghumatkar

1
field1:和field2:之后的1是什么意思?
袁咏仪

9
@DamonYuan他们设置索引中字段的排序顺序。1正在上升,-1将会下降。
JohnnyHK

1
@KetanGhumatkar它基于在调用中对象中列出字段的顺序index
JohnnyHK

2
1 and -1 specifies a ascending or a descending index key on the index field. I found docs http://mongodb.github.io/node-mongodb-native/2.1/tutorials/create-indexes/
Thai Ha


0

顺便说一句,接受的答案是错误的,根据https://stackoverflow.com/a/52553550/129300,您应将字段名称用单引号引起来,即:

mySchema.index({'field1': 1, 'field2': 1}, {unique: true});

快乐的一天!


JS中的对象键只要在语法上是有效的标识符,就可以不加引号。field1并且field2是有效的标识符。field1.foo例如,不是。
Gus

-3
    Following command can be used to create compound index for nested json:
    db.ACCOUNT_collection.createIndex({"account.id":1,"account.customerId":1},{unique:1}) 
Mongo json structure is like :
{"_id":"648738"
 "account": { 
    "id": "123",
    "customerId": 7879,
    "name": "test"
   ..
   ..

  }
}

我已经对示例数据进行了测试,它可以按预期正常运行。


我们不希望使用猫鼬外壳,而希望使用节点js模式
Rohit Nishad,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.