node-mongodb-native由DBRef $ id删除(点问题)

时间:2014-05-17 13:39:52

标签: node.js mongodb node-mongodb-native

我的mongodb数据库中有2个集合:usersposts。 在posts集合中,我有这样的DBRef字段:

user : DBRef('users', ObjectId('...'), null)

当我要按用户ID删除某些帖子时,我会执行以下操作:

db.posts.remove({ 'user.$id' : ObjectId('...') })

它工作得很好,但不是来自node-mongodb-native。来自node-mongodb-native我在执行此请求时遇到以下错误:

key must not contain '.'

可以看到吗?如果我错了,请感谢您的帮助和解释。

更新

通过DBRef $ id查找请求工作正常!

Node.js代码:

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

MongoClient.connect(nconf.get('db:connectionString'), function(mongoConnectionError, db) {
  if (mongoConnectionError) throw mongoConnectionError;

  db
    .collection('posts')
    .remove({ 'user.$id' : new mongodb.ObjectID('...') }, {}, function(err, removedItems) {
      if (err) { throw err; }

      console.log('Removed items: ' + removedItems);
    });
 });

1 个答案:

答案 0 :(得分:0)

我使用了类似的模型,但我的帖子来自一位用户,只是简单地说:

db.posts.remove({'user_id' : ObjectID('...') });

在这种情况下,看起来更像是集合帖子中有一个带有id的数组用户。

如果我没弄错的话,你应该使用用户数组中的$来为匹配后的数组中的元素做一些事情。

如果你的目的是移除整个帖子,只需通过匹配users数组中的id删除它:

db.posts.remove({user:{$in:ObjectID('...'}});

否则,$ pull,如上所述。