2012-01-18 3 views
0

En raison de la nature GWT de ma demande, je ne peux pas utiliser directement le ObjectId dans mon code, j'utilisé:@Id Chaîne id; est-ce la même chose avec @Id ObjectId id? Au moins au niveau mongodb?

@Id String id; à la place. C'est la même chose avec @Id ObjectId id? Au moins au niveau mongodb? Je veux dire dans la façon dont c'est le magasin, son format.

De même, existe-t-il un moyen de récupérer les documents en fonction de leur emplacement relatif à partir d'un ID de chaîne ou d'un ID d'objet? Comme avant ou après un ObjectId spécifique?

+0

Comment générer String id? Vous devez vous assurer que les ID générés augmentent (tel que défini par mongo) si vous voulez avoir des requêtes avant/après. – milan

Répondre

1

En raison de la nature GWT de ma demande, je ne peux pas utiliser directement le ObjectId dans mon code

oui vous pouvez si vous utilisez RequestFactory (et que vous utilisez RPC maintenant) .

@Id Chaîne id; au lieu. C'est la même chose avec @Id ObjectId id? Au moins à le niveau mongodb? Je veux dire dans la façon dont c'est le magasin, son format.

ce que cela répond à votre question:

> db.foo.findOne({_id : ObjectId("4f156018ef7b8b0317a8ad18")}) 
{ 
    "_id" : ObjectId("4f156018ef7b8b0317a8ad18"), 
    "a" : 2, 
    "b" : 4, 
    "c" : 5, 
    "d" : 1 
} 
> db.foo.findOne({_id : "4f156018ef7b8b0317a8ad18"}) 
null 
> "4f156018ef7b8b0317a8ad18" == ObjectId("4f156018ef7b8b0317a8ad18") 
true 
> 

Aussi, est-il un moyen de récupérer les documents en fonction de l'emplacement relatif d'une chaîne id ou donner ObjectId? Comme avant ou après un ObjectId spécifique?

oui, par exemple:

> db.foo.find() 
{ "_id" : ObjectId("4f156018ef7b8b0317a8ad18"), "a" : 2, "b" : 4, "c" : 5, "d" : 1 } 
{ "_id" : ObjectId("4f156022ef7b8b0317a8ad19"), "a" : 4, "b" : 1, "c" : 3, "d" : 2 } 
{ "_id" : ObjectId("4f17e667ef7b8b0317a8ad1d"), "a" : 4, "b" : 1, "c" : 3, "d" : 2 } 

> db.foo.find({_id : {$gt : ObjectId("4f156022ef7b8b0317a8ad19")}}) 
{ "_id" : ObjectId("4f17e667ef7b8b0317a8ad1d"), "a" : 4, "b" : 1, "c" : 3, "d" : 2 } 
> 
0
  1. Le format de magasin est pas le même, pour @Id id String, il est stocké comme: {_id: "4f115016db84b77e57732f4a", ...}, alors que pour @Id id d'objets, il est {_id: ObjectId("4f115016db84b77e57732f4a"), ...}

  2. champ _id est toujours indexé. Mais il est assez difficile de comprendre la sémantique de la relation "avant"/"après" entre les ides. S'il s'agit d'un UUID ou d'un ObjectID unique, cet ordre peut être complètement aléatoire au niveau de la fonction de comparaison de String. Quel est votre cas d'utilisation pour utiliser cette relation de commande?

+0

Je dois fournir un service similaire à twitter, un calendrier donc je dois obtenir des documents "avant" et "après" – xybrek

+0

alors vous devez probablement donner à votre modèle un champ timestamp 'created' et l'utiliser pour indexer les enregistrements –

Questions connexes