在我的收藏中,我有一个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" }
我将如何做到这一点?
提前致谢。
答案 0 :(得分: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,获得答案here。