0

在我的集合中,我有一个users字段作为 User 集合的数组。

所以,它目前看起来像这样:

{ "name" : "Untitled", "users" : [  {   "name" : "Ace Ventura",     "datecreated" : "2012-10-05T23:55:56.940Z",     "_id" : "740063fb-79c5-4f7f-96e1-907d6ffb1d16" } ], "datecreated" : "2012-10-05T23:55:56.954Z", "_id" : "e207eaea-89f7-48ae-8ba7-b6aa39db2358" }

我想更新它,使 User 集合的数组成为 User 集合的_id属性数组。像这样:

{ "name" : "Untitled", "users" : ["740063fb-79c5-4f7f-96e1-907d6ffb1d16" ], "datecreated" : "2012-10-05T23:55:56.954Z", "_id" : "e207eaea-89f7-48ae-8ba7-b6aa39db2358" }

我将如何做到这一点?

提前致谢。

4

1 回答 1

0

好吧,我想通了。

最初,我正在考虑做这样的事情:

db.lists.update(
   {},
   {
     $set: {
             users: <oldusers._id>
   },
});

但是,事实证明,您不能从update().

但是,事实证明我们可以使用forEach()

db.lists.find().forEach(function (list) {

    // Define length to ensure we have an array of users
    var userLength  = (list.users && list.users.length) || 0;

    var (var i = 0; i < userLength; i++) {
        // Ensure the current user object isn't null or undefined
        if(list.users[i])
            list.users[i] = list.users[i]._id
    }

    // Finally, save the list object back.
    db.lists.save(list)
});

谢谢,+gipset,在这里您的回答。

于 2013-03-20T01:41:55.073 回答