为什么没有像我期望的那样确保指数()正常工作?

时间:2014-11-19 19:28:14

标签: mongodb

给出代码

express = require('express')
bodyParser = require('body-parser')
url = require('url')

app = express()
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.set 'port', process.env.PORT || 5000
app.use express.static(__dirname + '/public')

mongodb = require('mongodb')
mongojs = require('mongojs')
dbLocation = process.env.MONGOLAB_URI || 'mongodb://localhost/wesave-companion'; 
db = mongojs(dbLocation)
transactions = db.collection 'transactions'
transactions.ensureIndex({item_id: 1}, unique: true)

app.post '/transactions', (req, resp) ->
  transaction = buildTransaction req.query
  createTransaction transaction
  resp.status = 200
  resp.send 'ok'

createTransaction = (transaction, user) ->
  transactions.insert transaction, (err, doc) ->
    return err if err
    return doc if doc 

我通常希望基于mongodb文档,http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/我的数据库不允许存在具有相同“item_id”键的多个记录,但事实并非如此。

我尝试将ensureIndex方法编写为:

transactions.ensureIndex({item_id: 1}, {unique: true})

transactions.ensureIndex({"item_id": 1}, {unique: true})

transactions.ensureIndex({'item_id': 1}, {unique: true})

但显然,使用mongoshell,记录条目肯定是重复的。我在这里缺少什么?

https://cl.ly/image/0X0m0R2U3s3T/Image%202014-11-19%20at%2011.24.47%20AM.png

有趣的是,如果我尝试将索引直接写入db,我会得到以下响应,我不知道如何解释。

https://cl.ly/image/2j1x2Z1D3a30/Image%202014-11-19%20at%2011.26.20%20AM.png

我应该在哪个方向挖掘? THX。

1 个答案:

答案 0 :(得分:1)

您没有任何重复项。您正在调用db.transactions.find(),它会返回您收藏的全部内容。

它返回一个文档,这意味着您的集合只包含一个文档。

你要三次打电话,你会注意到,每次都会回复同样的事情。