node-mongodb-native如何在子文档上创建索引?

时间:2014-02-08 15:35:37

标签: node.js mongodb

来自mongodb doc:

http://mongodb.github.io/node-mongodb-native/api-generated/collection.html?highlight=ensureIndex#ensureIndex

基本上为子文档创建索引包括写"address.city"之类的内容 到目前为止,我不能这样做。

我试过了:

index = "category.code";
index = { "category.code": 1 };
index = { "category": {code: 1} };

collection.ensureIndex( index, {unique: true, w: 1}, function(error, data){
        console.log(error ? error : documentName + ': [ensureIndex] ' + JSON.stringify(data));
    });

但没有创建索引。

还有其他解决方案吗? 当我从命令行通过mongo执行此操作时。

db.type.ensureIndex({'category.code':1})

但是当我从JS脚本运行它时,它没有。

var mongodb = require('mongodb');

exports.up = function(db, next){
    var documentName = 'type';
    var collection = mongodb.Collection(db, documentName);
    ...

我正在使用https://npmjs.org/package/mongo-migrate模块。

1 个答案:

答案 0 :(得分:5)

此代码在NodeJS中按预期工作:

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://localhost:27017/test", function (err, db) {
    db.collection("test").ensureIndex({ "category.code": 1 }, 
        function(err, result) {        
            db.close();
    });
});

显示集合的索引:

在运行代码之前

> use test
switched to db test
> db.test.getIndexes()
[
    {
            "v" : 1,
            "key" : {
                    "_id" : 1
            },
            "ns" : "test.test",
            "name" : "_id_"
    }
]

运行代码

之后
> db.test.getIndexes()
[
    {
            "v" : 1,
            "key" : {
                    "_id" : 1
            },
            "ns" : "test.test",
            "name" : "_id_"
    },
    {
            "v" : 1,
            "key" : {
                    "category.code" : 1
            },
            "ns" : "test.test",
            "name" : "category.code_1"
    }
]